我有一个大约有2000万行的表格,我会根据两列来进行查询,例如col1
,col2
。
例如,
select * from tmp where col1 = '1aagacdaafasd' and col2 in ('X','Y','Z')
col1
,我为列col1
创建了一个索引,它可以显着提高性能。col2
,问题在于col2
只有几个不同的值(小基数)。如果我还在col2
创建索引,我会问它是否会提高性能也就是说,我创建了两个索引,一个用于col1
,另一个用于col2
。
答案 0 :(得分:2)
在col2上创建第二个索引可能不会带来任何好处。
此查询的最佳索引是:
究竟哪个最好取决于您的数据分布。你应该互相测试这些。
答案 1 :(得分:2)
对于此查询:
select *
from tmp
where col1 = '1aagacdaafasd' and col2 in ('X', 'Y', 'Z');
最佳索引是综合索引:tmp(col1, col2)
。索引中键的顺序很重要,col1
需要在col2
之前。