因什么需求,要创建‘联合索引’?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是ok了,为什么有‘联合索引’的存在?求经验丰富老手谈谈。
- 现在大家普遍的说法是因为,查询条件出现类似这类情况时‘where xx=xx && xx=xx && xx>xx’使用联合索引会比单列索引高效,所以要使用多列索引,但是经过测试,事情并非如此,反而是单列索引处理时间比多列索引还快....详见测试代码及结果http://sdrv.ms/19S68M9(大家一起来测试下,看看是不是单一偶然情况......)。
最后的答案我截取了Filix Suo第二个观点里一段话为答案,创建多列索引的意义就是为了‘减少io操作’。可能使用这个会相应失去什么,这个就有待大量测试考证了。
2013/11/25 23:37更新:
今天刚入手mariadb,结果在手册里翻到了一份多列索引结构的解释(嘿嘿,真开源果然不同),贴出来供大家参考:
https://mariadb.com/kb/en/index-condition-pushdown/
创建多列索引(列1,列2,列3)后的结构类似这样(index结构,附属列,附属列)
附属列可能直接跟在叶节点上,或单独存放(这个没有看到说明)...
附带可以说明单列索引就是多列索引一种形式,只不过没有附属列罢了。。。
简单的说有两个主要原因: