带有IN子句的SQL Server语句:如何使它们更快?

时间:2012-07-31 11:15:13

标签: sql sql-server performance query-optimization

我需要优化以下查询(表group_attributes)获得列group_idattribute_idint_value

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查询都很慢。

最佳,Askar

2 个答案:

答案 0 :(得分:1)

解决方案 - 我

我认为您可以通过创建以下索引来提高性能。

  1. 在group_id上创建群集索引
  2. 非属性索引(attribute_id,int_value)
  3. 解决方案 - II

    您还可以将所有int_values插入临时表,然后在临时表上创建non_clustered索引。还要在主表的int_value上创建非聚集索引。

答案 1 :(得分:0)

首先,将所有必需的int_values存储到Temp表中并创建聚簇索引。其次,Inner将此临时表与group_attributes表连接。

这将有希望提供更好的表现。另请更新效果结果。