我想优化以下查询
Select Distinct(Column_A) from Table_name where Column_B = 'Something'
这基本上是一个全表扫描(大约750万条记录)。我想知道我是否可以在此column_A上添加一个索引,以便它可以执行完整的索引扫描,或者还有其他更好的解决方案吗?
答案 0 :(得分:4)
您可以在Table_name(Column_B, Column_A)
上创建索引。索引“覆盖”了查询,因此只应为查询访问索引。
编辑:
我一直在想这个。即使使用索引,一些SQL引擎也可能会对数据进行排序以解析distinct
。以下查询可能更快:
select column_A
from table_name t
where column_B = 'Something' and
t.id = (select min(id)
from table_name t2
where t2.column_A = t.column_A and t2.column_B = t.column_B
);
要使其正常工作,需要table_name(column_A, column_B, id)
上的索引。除了索引之外,这假定每行都有唯一的id
。