优化SQL查询

时间:2014-01-16 03:02:56

标签: sql performance query-optimization

我想优化以下查询

Select Distinct(Column_A) from Table_name where Column_B = 'Something'

这基本上是一个全表扫描(大约750万条记录)。我想知道我是否可以在此column_A上添加一个索引,以便它可以执行完整的索引扫描,或者还有其他更好的解决方案吗?

1 个答案:

答案 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