T-SQL - 索引

时间:2014-07-17 21:15:00

标签: sql sql-server-2008 tsql

我们有一个相当大的表(大约1800万条记录),从这个表中查询我们总是包含AccountId,一个帐户可以容纳5万到2百万条记录,我们通常根据{{1}查询}或SalesRep(很少同时出现)。

将索引应用于此表时哪个更合适?

  • Custered SyntheticColumnId
  • 非群集AccountId,SalesRepId
  • 非群集AccountId,CollectionsRepId

  • Clustered SyntheticColumnId
  • 非群集AccountId
  • 非Clustered SalesRepId
  • 非群集CollectionsRepId

谢谢,

- 在评论中按照billinkc的问题进行编辑。

这是一个舞台表,每天都会被截断/刷新。我没有提到这一点,因为我总体上很好奇。如果我们应该在每个字段中使用CollectionsRep,我们不确定我们是否在查询中使用了许多其他常用字段。

对于这个表,我想要索引的原因是在推送到生产之前加速以后的聚合。以前这些工作需要20-30分钟,但在指数(第一个例子)之后,它们下降到不到一分钟。

  • 版本 - 10.0.4000.0
  • 产品级别 - SP2
  • 版本 - 企业版(64位)

1 个答案:

答案 0 :(得分:2)

您的首选索引是正确的选择。您说在查询中始终使用AccountId。因此,它应该在与其他字段的索引中。这将允许索引直接访问查询所需的行。

第二组索引仅提供行的部分覆盖。如果使用它们,则SQL Server必须返回数据页面以获取用于过滤的其他信息。