SQL查询语句索引的选择

有一个查询语句效率很低,但是实在无法确定该怎么建立索引。
查询条件是

select
    xxx
from
    a=1
    and b !=1
    and c = 1
    and d = 1
order by
    e desc
limit
    0,2

其中
1. a和d是表示状态的字段,重复度很高不适合建索引的那种
2. c的重复度很低,相同的只有几条,但有一大半是空值
3. b是主键 但取的是!=也走不了索引
4. e是数据的入库时间

在不改变查询条件的情况下应该把索引建在哪里?索引的字段顺序应该怎么放?

3个回答

首先b字段是会走索引的,可以看下mysql的最左原则及mysql索引失效的几种规则。不是重复度高,不能建索引,若数据量大的话还是可以建索引的,索引用的是B-tree树,相当于折半查找。建议建索引a,d,c。另外使用explain查看一下执行计划。

排序为什么要用e呢?

首先考虑如果c=1这儿的1是具体数值不是空的话,就建c上先看下,这样会走索引扫描INDEX RANGE SCAN,效率也比较高,如果说会等于空值那么你的结果集必定很大除非你b!=的筛选很多,那这样瓶颈就不是建索引解决的了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问