2014-01-16 184 views
0

我想優化以下查詢優化SQL查詢

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

這基本上執行全表掃描(約7.5萬條記錄)。我想知道是否可以在此column_A上添加索引,以便它可以執行全索引掃描,或者是否有其他更好的解決方案?

回答

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

+0

但除了創建索引之外,還有其他方法嗎? – user1270123

+0

你可以用'Column_B'按表分區。 –

+0

或物化視圖。 –