如果在数据表TA中有若干个字段A,B,C,D需要建索引,其中A为主键,B,C,D在数据表查询时在一个SQL语句中均被使用。
那么B,C,D是单独建3个索引好,还是合在一起建一个索引好呢?
合在一起建索引的时候这三个字段的先后顺序有什么讲究?
如果有两个SQL语句,分别如下:
select * from TA where A=... and B=... and C=... order by D
select * from TA where A=... and C=... order by C desc,B
那么又改如何安排索引才能使查询效率最高呢?
是否应该为每个字段单独设立索引?
其中A,B,C,D都被用到了,假设B,C,D都是integer型的,是有重复项的,那么它们是各自单独建索引还是合在一起建一个索引好呢?
我觉得如果把他们三个按照B,C,D的顺序合在一起的话,对第二个查询语句好像不是太合适。
还有一种情况就是,假设在上例中B是integer,C和D都是varchar(100),那么在下面这个SQL查询中,
select * from TA where A=... and B=... and C='...' and D='...' order by B
如果按照B,C,D的顺序建一个索引应该是比较合适的。
但如果同时有另一个查询
select * from TA where D=... order by D
那么上面的那个查询好像就不是很合适了(因为D在最后面,查询效率低)。
在这种情况下,如果单独为D建一个索引,则上面的那个复合索引就有了冗余项,是否应该把上面那个索引里面的D去掉呢?(但那样,上面那个查询使用的索引就不是最优化的了)
以上是我的一些疑问,请大家指点。谢谢!
---------------------------------------------------------------
当你建立了多字段的联合索引时,如果使用其中单个排序的时候,只有在第一个的字段才有作用.比如:
当你建立了a,b,c的联合索引,只有包含了a的查询才有用,而且和次序有关
---------------------------------------------------------------
接up
如果你的查询中只用到a,c,那么索引有没用了.