什么列选择创建聚簇索引

时间:2018-12-14 11:50:34

标签: sql-server tsql

我有一个表,其中有超过2500万行。该表每天都会变大(大约35,000行)。我在2列上创建了非聚集索引-date和债务_id(这些列在WHERE Clouse中使用最频繁),每个债务_id在每个日期仅出现一次。因此该表仍然是堆,因为它没有聚簇索引。您是否认为添加标识列(1,1)并在其上创建聚簇索引是个好主意吗?还是您认为我应该怎么做才能提高这张桌子的性能?

1 个答案:

答案 0 :(得分:1)

如果两列在任何情况下都是唯一的,则可以将它们用作聚簇索引。

最重要:聚集索引不应更改其值,并且应以正确的顺序附加新行。

  • 插入时间为DATETIME2作为聚簇索引的第一列是一个很好的选择。
  • 必须通过此值和您提到的debt_id的组合来保证唯一性。
  • 假设插入时间和debt_id都不在改变数据,这看起来像是一个很好的组合PK。

否则,您的聚集索引可能会得到fragmented。这会使情况变得更糟...(UNIQUEIDENTIFIER ID像群集PK一样非常糟糕的主要原因。可以定期运行索引修复脚本是可以接受的解决方法。)

只要您对两列进行查询过滤(至少必须涉及第一列),非碎片化的聚集索引都可以加快处理速度。

您可以添加更多索引,甚至可以向它们INCLUDE急需的值。

其他索引将使用聚簇索引作为查找(建立聚簇索引后可能需要重新创建)。如果聚簇索引运行良好,这会有所帮助,否则会使情况变得更糟。

所以我要说:如果以上情况对您来说都是正确的,那么附加的ID IDENTITY几乎没有帮助。这将为每个查询增加一个步骤,因为查询将需要额外的查找。但是,如果索引易于碎片化,我宁愿添加其他ID。最后,在评论中引用George Menoutis

  

嗯,我当然不能回答这个问题。这是一个深层的设计选择   优点,缺点和讨论负担

在不知道数据库和需求的情况下,这纯粹是猜测...