mysql联合索引

场景是:比如某一个表demo中有a_id, b_id, c_id 都是一些关联其他表的id,而对于demo表,经常查询时条件是,a_id = xx and b_id = xx 或 a_id = xx and c_id = xxx。。这种情况下,我们会加常规索引,alter table demo add index (a_id)     alter table demo add index (b_id)  alter table demo add index (c_id)。。   但是有联合索引的概念,问题:alter  table demo add index a_b_c  (a_id,b_id,c_id)  这样设置与 用两条设置 alter table demo add   index a_b (a_id,b_id)    alter table demo add   index a_c (a_id,c_id) 这俩种方式各起到怎么意义和区别?? 
已邀请:

空心菜 - 心向阳光,茁壮成长

我们都知道索引,也知道用法,但是对于新手我想百分九十不懂,联合索引的使用,这也是优化数据的一个细节,但是又不能随便设置,要根据你的业务需求来判断。



          使用场景,比如,一个表中有id  a_id  b_id 为了命中索引,方便查询,不懂联合索引的话,就会一一给a_id和a_id设置常规索引,但是其实应用中我们更常用到的sql是这样的 where a_id =5 and c_id = 2,这时候应该把a_id和b_id做成联合索引,这样的联合索引比起单个索引会高效,联合索引设置:alter table demo add index a_b_id (a_id,b_id)。


         联合索引使用范围:举一个很能体现一目了然的例子,手机通讯录,我们会存下姓+名,如李小六,这就类似想象成我们的联合索引,单手机需要查询这个人的时候,手机肯定是先搜李,再搜小,如果你不先输入李,而是先输入小,进行搜索,那么就会搜索不到匹配不出来,一样的要是你先输入李,筛选出来一大批李后,你再输入六,一样的也是会匹配不到。
          明白了么,我想通过这个例子应该很形象吧,联合索引也是这个原理,它必须是从左到右进行匹配,才能命中索引,不按照从左到右的搜索条件的话,那么相当于没有命中索引。所以不能随便设置联合索引,甚至联合索引你还要设置好谁在前谁排在后的顺序,要判断好自己的业务是否符合,才能真正起到高效。

Kevin

赞同来自: 空心菜

经过一番认真对比,最后我得到的结论是:http://dayblog.cn/index.php/artc/96.html

空心菜 - 心向阳光,茁壮成长

利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。

要回复问题请先登录注册