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)
这俩种方式各起到怎么意义和区别??
没有找到相关结果
已邀请:
3 个回复
空心菜 - 心向阳光,茁壮成长
使用场景,比如,一个表中有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
赞同来自: 空心菜
空心菜 - 心向阳光,茁壮成长