无法命中索引的几种情况

    科技2024-08-09  30

    无法命中索引的几种情况

    正确使用索引

    数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效。

    1. like '%xx' select * from tb1 where name like='%cn'; 2. 使用函数 select * from tb1 where reverse(name) = 'giao'; 3. or select * from tb1 where nid = 1 or email = 'seven@live.com'; --特别的:当or条件中有未建立索引的列才失效 --以下会走索引 select * from tb1 where nid = 1 or name = 'seven'; --nid和name都是索引 select * from tb1 where nid = 1 or email = 'seven@live.com' and name= 'alex' --nid和name是索引,email不是,也会走索引 4. 类型不一致 如果列是字符串类型,传入的条件是必须是字符串,不然无法命中索引 select * from tb1 where name = 999; --这里传的条件是整型,无法命中索引 5. != select * from tb1 where name != 'alex' --特别的:如果是主键,则还是会走索引 select * from tb1 where nid != 123 6. > select * from tb1 where name > 'alex' --特别的:如果是主键或索引是整数类型,则还是会走索引 select * from tb1 where nid > 123 select * from tb1 where num > 123 7.order by select email from tb1 order by name desc ; --当根据索引排序时候,选择的映射如果不是索引,则不走索引 --特别的:如果对主键排序,则还是走索引:select * from tb1 order by nid desc; 8.组合索引最左前缀 如果组合索引为:(name,email) name and email -- 使用索引 name` -- 使用索引 条件只有email -- 不使用索引
    Processed: 0.010, SQL: 8