gpt4 book ai didi

sql-server-2008 - 删除主键(聚集索引)以提高插入性能

转载 作者:行者123 更新时间:2023-12-04 16:36:19 24 4
gpt4 key购买 nike

我们一直在经历 SQL 超时并确定瓶颈是审计表 - 我们系统中的所有表都包含插入、更新和删除触发器,这些触发器会导致新的审计记录。

这意味着审计表是系统中最大和最繁忙的表。然而数据只进不出(在这个系统下)所以没有select性能是必需的。

运行 select top 10返回最近插入的记录而不是“第一条”记录。 order by当然有效,但我希望 select top 应该根据它们在光盘上的顺序返回行 - 我希望这会返回最低的 PK 值。

有人建议我们删除聚集索引,实际上也删除主键(唯一约束)。正如我之前提到的,没有必要 select从这个系统中的这个表。

聚集索引在表上创建什么样的性能影响?拥有未索引、非集群、无键表的(非选择)后果是什么?还有其他建议吗?

编辑

我们的审计涉及 CLR 函数,我现在正在使用和不使用 PK、索引、FK 等进行基准测试,以确定 CLR 函数和约束的相对成本。

经查,性能不佳与insert无关。语句,而是编排审计的 CLR 函数。在删除 CLR 并改为使用直接的 TSQL proc 后,性能提高了 20 倍。

在测试期间,我还确定聚集索引和标识列对插入时间几乎没有影响,至少相对于发生的任何其他处理而言。

// updating 10k rows in a table with trigger

// using CLR function
PK (identity, clustered)- ~78000ms
No PK, no index - ~81000ms

// using straight TSQL
PK (identity, clustered) - 2174ms
No PK, no index - 2102ms

最佳答案

根据金伯利·特里普(Kimberly Tripp) - 索引女王 - 在表上建立聚集索引实际上有助于 INSERT 性能:

The Clustered Index Debate Continued

  • Inserts are faster in a clustered table (but only in the "right" clustered table) than compared to a heap. The primary problem here is that lookups in the IAM/PFS to determine the insert location in a heap are slower than in a clustered table (where insert location is known, defined by the clustered key). Inserts are faster when inserted into a table where order is defined (CL) and where that order is ever-increasing.


来源:名为 The Clustered Index Debate Continues.... 的博文

关于sql-server-2008 - 删除主键(聚集索引)以提高插入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com