请教一个关于mysql索引的问题

起个昵称吧 发布于 2016/08/29 18:04
阅读 164
收藏 0

遇到一个疑问,创建了一下多列索引startDate, status, currentStep, initstep, 但是在我在查询数据的时候,select 的内容也必须也只能有这几个索引字段,不能有其他字段么,为什么如果select其他字段后,就不会走索引了

加载中
0
g
gzgz8080

估计是索引最左匹配的问题。

比如你建立了a,b,c,d四个字段的联合索引,

但用了b,c,d,x,y,z字段去查询,

那就用不了索引了。

起个昵称吧
起个昵称吧
但是表里面有5个字段a,b,c,d,e 我建索引只建了a,b,c,d这四个字段, 但是我select a,b,c,d,e的话,就不会走索引了,必须得只查询a,b,c,d才行呢?
0
o
oneflower
对于多元素索引,是否访问索引与索引列的顺序有关,
如果你的联合索引列顺序是startDate, status, currentStep, initstep,且where条件的第一列为startDate,并且where条件还包含其他列,也会走该索引的。

参考自:MySQL多元素索引的范围访问方法

起个昵称吧
起个昵称吧
但是在测试的时候发现,只有在select startDate, status, currentStep, initstep 这四个字段才行, 如果再添加其他字段,例如startDate, status, currentStep, initstep,serialno,就不行了呢?
0
loyal
loyal
可以不全用,但需要以索引的左侧开始。如果跳了,复合索引就失效。
loyal
loyal
回复 @起个昵称吧 : 索引的目的就是为了查询.你复合索引就必须保证顺序.你需要合理的思考到底用符合索引还是普通索引.
起个昵称吧
起个昵称吧
是不是所有select的字段都要加到索引里面呢,比如说,索引设置了A,B,C,D字段, 但我select A,B,C,D,E之后就不走索引了,把E字段去掉,或者把E加到索引里面之后,查询才能走索引。
返回顶部
顶部