有关MySQL索引的一点补充

索引算是MySQL里面一个相当重要的东西了,常见的概念网上到处都是,这里就不写出来了,主要写点自己在平时使用过程中的一点注意事项,以备后期自己查阅:

- like '%xx'
    select * from tb1 where name like '%cn'; --未使用索引
    select * from tb1 where name like ‘cn%'; --使用索引
- 使用函数
    --未使用索引
    select * from tb1 where reverse(name) = 'Hwan';
    --使用索引
    select * from tb1 where name = reverse('Hwan');
    
- or
    select * from tb1 where nid = 1 or email = 'seven@live.com';
    特别的:当or条件中有未建立索引的列才失效,以下会走索引
            select * from tb1 where nid = 1 or name = 'seven';
            select * from tb1 where nid = 1 or email = 'seven@live.com' and name = 'alex'
- 类型不一致
    如果列是字符串类型,传入条件是必须用引号引起来,不然...
    select * from tb1 where name = 999;
- !=
    select * from tb1 where name != 'alex'  --all
    特别的:如果是主键,则还是会走索引
        select * from tb1 where nid != 123 --range
- >
    select * from tb1 where name > 'alex'
    特别的:如果是主键或索引是整数类型,则还是会走索引
        select * from tb1 where nid > 123
        select * from tb1 where num > 123
- order by
    select email from tb1 order by name desc;
    当根据索引排序时候,选择的映射如果不是索引,则不走索引
    特别的:如果对主键排序,则还是走索引:
        select * from tb1 order by nid desc;
 
- 组合索引最左前缀
    如果组合索引为:(name,email)
    name and email       -- 使用索引
    name                 -- 使用索引
    email                -- 不使用索引
 

 

posted @ 2016-10-27 18:03  玖色堇  阅读(110)  评论(0编辑  收藏  举报