首页 新闻 搜索 专区 学院

mysql like % 为什么会用上索引

0
悬赏园豆:20 [已解决问题] 解决于 2021-02-24 14:36
SELECT
      *
      FROM table t
      WHERE 1=1 
		  and t.name like '%丁%'
      ORDER BY t.id
      LIMIT 0, 10

table表中有46万数据,但是解释执行计划中扫描行数很少而且也用上了索引,并且实际效果执行也很快

沉默的背影的主页 沉默的背影 | 初学一级 | 园豆:184
提问于:2021-02-24 12:05
< >
分享
最佳答案
0

执行计划贴出来

收获园豆:20
czd890 | 专家六级 |园豆:10394 | 2021-02-24 13:25

沉默的背影 | 园豆:184 (初学一级) | 2021-02-24 13:29

@沉默的背影: 还有表结构,索引信息

czd890 | 园豆:10394 (专家六级) | 2021-02-24 13:37

@czd890:
name是btree索引,(id,cust_vendor_flag)是联合主键

沉默的背影 | 园豆:184 (初学一级) | 2021-02-24 13:41
czd890 | 园豆:10394 (专家六级) | 2021-02-24 13:45

@czd890:
我的疑惑不在于为什么能用上索引,能用上索引主要原因应该就是您发的帖子中说的扫描的是主键索引
执行速度快我觉得也没什么问题,因为我不用id排序,直接name like %丁%速度也不慢
我的疑惑在于为什么扫描行数explain只有10rows,应该是全表扫才对呢?

沉默的背影 | 园豆:184 (初学一级) | 2021-02-24 14:13

@沉默的背影: 因为走索引了呀, 索引里面匹配到limit的10行后, 在执行的 select *

czd890 | 园豆:10394 (专家六级) | 2021-02-24 14:33

@czd890: 哦 我明白了 rows应该是被limit这个语句影响了 实际扫描行数还是很多的

沉默的背影 | 园豆:184 (初学一级) | 2021-02-24 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册