2012-07-31 61 views
1

我需要優化以下查詢(表group_attributes)得到列group_id,attribute_idint_value帶IN子句的SQL Server語句:如何使它們更快?

select group_id 
from group_attributes 
where attribute_id= 1049 
     and int_value in (1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 
       1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 
       1265, 1266, 1267, 1268, 1269, 1270, 1271) 

group_attributes是一個巨大的表和查詢需要永遠。

我不是那麼熟悉SQL,所以我想知道哪個查詢會更快?看起來總的來說這些IN查詢是該死的慢。

最佳阿斯卡爾

+6

你在桌上有什麼指標?你能展示執行計劃嗎? – 2012-07-31 11:16:35

+2

我想''(attribute_id,int_value,group_id)'上的索引將是有效的。 – 2012-07-31 11:17:37

+2

可能只是「樣式」的問題,但在您的特殊查詢中,您可以使用「int_value BETWEEN 1247 AND 1271」。 – Marco 2012-07-31 11:18:24

回答

1

解決方案 - 我

我想你可以提高通過創建以下索引的性能。

  1. 上GROUP_ID創建羣集索引
  2. 非羣集上(attribute_id,int_value)指數

解決方案 - II

您也可以將所有int_values到一個臨時表,然後創建臨時表上的非聚簇索引。還要在主表的int_value上創建非聚集索引。

+0

這有幫助!謝謝! – 2012-08-01 16:22:58

+0

嘿你爲什麼不接受這個?這個答案的任何問題?請讓我知道,以便我會盡力解決。 – AnandPhadke 2012-08-06 08:40:32

0

嘗試以這種方式

第一店所需的所有int_values到一個臨時表,並創建一個聚集索引。

第二次將此臨時表與group_attributes表聯接起來。

希望這會帶來更好的表現。

也請更新性能結果。