mysql like语句会导致全表扫描?

select id from t where name like '%abc%'

阅读 15k
6 个回答

不一定 看查询条件。
如果是符合左前缀,即可走索引
比如 like abc%

同楼上,sql中尽量别 like 前后模糊,如果数据量大,那得蹦。

模糊查询,就算你有索引,你也不知道索引里是不是有这三个字母还是这么排列的位置还是这样的那一行呀。。。

同意二楼,不是从开始就模糊匹配的可以走索引

结论:是会的.

需要分情况讨论.

  1. 如果是前置模糊索引like '%abc'势必会进行全表扫描.

  2. like 'abc%'依旧有可能进行全表扫描,当部分DBMD中返回结果超过该表的80%时,就失去使用索引的意义数据库会自动改用全表扫描.(例如: where mobile like '1%')

会导致全表扫描的sql:

  1. 判断null

  2. or条件

  3. 前置%的like(如:like '%abc')

  4. where条件中存在表达式

ps:先想到这么多,欢迎补充。

感谢 @彼岸花开 补充:
WHERE 子句中使用!=或<>操作符2.IN 和 NOT IN 也要慎用,否则会导致全表扫描

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题