>我有一个有大约 2000 万行的表,我将执行针对两列过滤的查询,例如col1
、col2
。
例如
select * from tmp where col1 = '1aagacdaafasd' and col2 in ('X','Y','Z')
- 对于
col1
,我为列col1
创建了一个索引,它大大提高了性能。 - 对于
col2
,这里的问题是col2
只有几个不同的值(小基数(。我会问如果我也在col2
上创建索引是否会提高性能。
也就是说,我创建了两个索引,一个用于col1
,另一个用于col2
。
在 col2 上创建第二个索引可能不会带来任何好处。
此查询的最佳索引是:
- 仅 Col1 上的索引
- 两个 Col1、Col2 上的单个索引
确切地说,哪个是最好的将取决于您的数据分布。 您应该相互测试这些。
对于此查询:
select *
from tmp
where col1 = '1aagacdaafasd' and col2 in ('X', 'Y', 'Z');
最好的指数是综合指数:tmp(col1, col2)
。 索引中键的顺序很重要,col1
需要在col2
之前。