在这里问两个关于复合索引的问题,麻烦各位大侠帮个忙,感激不尽!!!
(1)
假设table1表有1千万的数据,a列的取值范围[0,10],而b列的取值范围[0,1000]。
我建立复合索引是 a,b 还是 b,a
a和b的先后顺序有影响吗?(2)
如果我有一个table2,我经常要按照a,b,c,d,e的组合来查表。
而这些字段的取值都比较小,一般都是[0,5]左右,建立一个(a,b,c,d,e)这样的复合索引会不会对性能没有什么好的帮助呢?
如果我在table2表中新建一个字段id,然后update table2 set id = (((a*10 + b)*10 + c)*10 + d)*10 + e;
然后对id这列字段建立索引,这样是否会比较快呢?是否可行呢?
(1)
假设table1表有1千万的数据,a列的取值范围[0,10],而b列的取值范围[0,1000]。
我建立复合索引是 a,b 还是 b,a
a和b的先后顺序有影响吗?(2)
如果我有一个table2,我经常要按照a,b,c,d,e的组合来查表。
而这些字段的取值都比较小,一般都是[0,5]左右,建立一个(a,b,c,d,e)这样的复合索引会不会对性能没有什么好的帮助呢?
如果我在table2表中新建一个字段id,然后update table2 set id = (((a*10 + b)*10 + c)*10 + d)*10 + e;
然后对id这列字段建立索引,这样是否会比较快呢?是否可行呢?
(2):你执行这样的update以后肯定会快一些,就相当于创建了一个函数索引。
比如我要查找a=3 and b=567,而建立的索引如果是(a,b),那我先找a,会不会一下子把数据缩短了比较小的范围,这样比先查b应该会不一样吧。个人感觉是这样的,但是上网找了不少资料,就是没有讲这个方面的。
1000w数据,假如分布均匀:
a列的取值范围[0,10],也就是说每一个a值对应100w记录;
b列的取值范围[0,1000],也就是说每一个b值对应1w记录显然,先按b查询可以更大程度缩小数据范围