2012-07-31 83 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表联接起来。

希望这会带来更好的表现。

也请更新性能结果。