美文网首页Java
模糊查询%在最前面,能否或者怎么使用索引

模糊查询%在最前面,能否或者怎么使用索引

作者: 一觉睡到丶小时候 | 来源:发表于2020-05-22 11:39 被阅读0次

前言

众所周知,在索引时,如果模糊查询的%置于最前面,索引会失效。但是在%前置时,什么情况下会使用到索引?

补充

like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。
like keyword% 索引有效。
like %keyword% 索引失效,也无法使用反向索引。

解决

方式一

反转模糊查询的字段,但是注意,对于"%keywork%"的索引,此方法是无效的。

select * from company where companyName like '%江南皮革长';

我们可以改造为:

select * from company where reverse(companyName) like reverse('%江南皮革长');

方式二

首先我们有TEST_USER表:

CREATE TABLE `USER` (
  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `NAME` varchar(64) DEFAULT NULL COMMENT '名字',
  `MOBILE` varchar(11) DEFAULT NULL COMMENT '手机号',
  PRIMARY KEY (`ID`),
  KEY `INDEX_MOBILE` (`MOBILE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试的用户表';

1.只查询索引

EXPLAIN SELECT
    MOBILE
FROM
    USER
WHERE
    MOBILELIKE '%151'
图片.png

Extra:Using index. (走索引)

2.查索引字段和主键

EXPLAIN SELECT
    ID,MOBILE
FROM
    USER
WHERE
    MOBILE LIKE '%151'
图片.png

Extra:Using index. (走索引)

3.查非索引字段

EXPLAIN SELECT
    MOBILE,NAME
FROM
    USER
WHERE
    MOBILE LIKE '%151'
图片.png

Extra:Using where. (不走索引)

4.where后面多条件

4.1where后跟普通条件
EXPLAIN SELECT
    MOBILE
FROM
    USER
WHERE
    NAME = '江南皮革厂'
AND MOBILE LIKE '%151'
图片.png

Extra:Using where. (不走索引)

4.2where后跟主键
EXPLAIN SELECT
    MOBILE
FROM
    USER
WHERE
    ID >1
AND MOBILE LIKE '%151'
图片.png

Extra:Using index. (走索引)

总结

like查询百分号前置,并不是100%不会走索引。
如果只select索引字段,或者select索引字段和主键,也会走索引的。
如果where条件中有主键时,走索引。

一句话:在select和where中存在除了索引和主键外的其他条件或字段时,不走索引。

个人博客
腾讯云社区
掘金
CSDN
公众号:

wx.jpg

相关文章

  • 模糊查询%在最前面,能否或者怎么使用索引

    前言 众所周知,在索引时,如果模糊查询的%置于最前面,索引会失效。但是在%前置时,什么情况下会使用到索引? 补充 ...

  • SQL技巧

    0.查询时明确查询字段,不用星号*代替 1.负向条件查询不能使用索引 前导模糊查询不能使用索引 在属性上进行计算不...

  • SQL优化

    1.负向条件查询不能使用索引 2.数据区分度不大的字段不宜使用索引 前导模糊查询不能使用索引 在属性上进行计算不能...

  • sql--性能优化

    2018-10-08 查询的模糊匹配:尽量避免在一个复杂查询里面使用模糊匹配索引问题:缺少合适的索引法则:不要在建...

  • SQL 优化

    SQL 优化 负向查询不能使用索引 应该修改为: 前导模糊查询不能使用索引 如: 非前导则可以: 建议可以考虑使用...

  • 关于SQL优化的小知识

    负向查询不命中索引 不命中 命中 前置模糊查询不命中索引 不命中 命中 建议可以考虑使用 Lucene 等全文索引...

  • mysql索引常见注意事项

    简述 记录一些mysql索引在设计使用时的事项 内容 前导模糊查询无法命中索引 数据类型隐式转换无法命中索引 复合...

  • MySQL的优化

    优化 负向查询不能使用索引 还有 not in/not exists都不是好习惯 可以优化为in查询: 前导模糊查...

  • 走向DBA之不走索引的情况

    前文介绍了合理的设定和使用索引的好处,本篇介绍查询时不走索引的几种情况 一、没有查询条件,或者查询条件没有建立索引...

  • 索引及分区表5

    一、索引 索引的目的: 索引的类型: 1、Btree索引: 2、位图索引: 3、全文索引:就是模糊查询,解决模糊查...

网友评论

    本文标题:模糊查询%在最前面,能否或者怎么使用索引

    本文链接:https://www.haomeiwen.com/subject/khfqahtx.html