美文网首页
MySQL索引失效记录

MySQL索引失效记录

作者: _308b | 来源:发表于2020-05-22 17:25 被阅读0次

    基于InnoDB引擎

    1. 条件用 or 拼接可能失效
      为啥呢?假设通过索引过滤获取到的数据集为A,满足查询条件的结果集为B。如果A是B的子集,那么想要得到最终结果,除了索引过滤后得到的数据集,是不是还要通过全表扫描来获取数据集B - A。既然需要全表扫描,那为什么还需要索引过滤呢(也就是为什么需要 索引过滤 + 全表扫描 呢),直接全表扫描不就完了吗。所以这个时候索引就不起作用了,MySQL优化机制会直接使用全表扫描。
      什么时候会出现A是B的子集呢?当or拼接的左边或者右边不是索引列时,是不是就有可能出现A是B的子集,所以这种情况索引会失效
      为什么and拼接索引不失效呢,因为and拼接的话,B肯定是A的子集,这个自己想想应该能明白
      注:这里说的拼接所用的判断符仅限 =, >=, <= 等不会终止索引匹配的条件,不包含会终止索引匹配的条件:>,< 等条件

    未完.....

    相关文章

      网友评论

          本文标题:MySQL索引失效记录

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