mysql 不走索引的情况


执行mysql语句很多时候 这条语句没有我们想象的那样去走索引;下面罗列出都什么情况不会走索引


1:查询语句带有子查询;

    在where条件中使用了select做字段筛选集合;


    solution: one 在语句中使用force 强制使用某个索引;

                   two 重组sql 语句使用join union 等去改写sql


2:查询语句中where id=1 or user_id >2; 

    这种情况有很大可能会不使用索引;

    solution: one 确定2个列都有索引;

                   two 拆分成union 或者join 重写sql


3: like 查询 查询value 以 '% xxx ...' 开始  通配符在前面;执行的是全表扫描的;

    这种情况也不会使用索引


4:字符串字段 赋值没用引号括起来  name = 123;两边数据类型不对等

5:条件选择弱,基本列都列出来了;基本全扫描会更快了;这样建立的索引基本没啥用了

6:count(*) 当部分字段没有not null 约束;也不会走索引

7:不等于号 

8:isnull 条件不走索引

9:索引字段加了运算;

10:order by (fld) asc ; 当where 条件中没有 fld 作为条件,那么依然不会用索引;
    注意在条件中使用fld 作为筛选条件;


...more

  • Author

    12 days ago | Profile | #

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.