当前位置: 首页 > 面试题库 >

SQL Server-PK删除性能不佳

冯风史
2023-03-14
问题内容

我在SQL Server 2008
R2中有一个表,该表包含约400行(几乎没有任何内容)-它在主键(这是一个标识)上具有聚集索引。其他约13个表通过引用完整性(没有级联删除或更新)引用了该表。

插入/更新/获取几乎是即时的-我们正在谈论一瞬间(这应该在意料之中)。但是,使用PK进行删除最多需要3分钟,而我从未见过比1.5分钟更快的时间:

DELETE FROM [TABLE] WHERE [TABLE].[PK_WITH_CLUSTERED_INDEX] = 1

该指数非常分散-90%。我重建并重新组织了该索引(以及该表上的其余索引),但我无法将其降低到50%以下。

另外,我将数据库备份/恢复到本地PC,删除没有问题-不到一秒钟。

我还没有做的一件事就是完全删除聚簇索引,然后重新添加它。这本身就是一个问题,因为当其他表引用PK索引时,SQL Server不允许您删除它。

有任何想法吗?

更新

我应该将其包含在我的原始帖子中。执行计划将“责备”放在聚集索引删除上-70%。在引用该表的13个表中,执行计划表示没有一个超过整个查询的3%-几乎所有索引搜索命中。


问题答案:

好吧,我有一个答案…

首先,我几乎用尽了上面问题中指示的所有选项以及相关答案。对于看起来很琐碎的问题,我没有运气。

我决定要做的是以下几点:

  1. 添加一个临时唯一索引(因此SQL Server将允许我删除聚集索引)
  2. 删除聚簇索引。
  3. 重新添加聚簇索引。
  4. 临时删除唯一索引。

本质上,我擦除并重新添加了聚簇索引。我唯一可以摆脱的是索引的一部分或它的物理存储位置被“损坏”(我宽松地使用了该术语)。



 类似资料:
  • 我需要在PostgreSQL 9.0.4上运行一个删除查询。我发现它一直在运行,直到在子选择查询中达到524289行。 例如,524288没有使用物化视图,成本看起来相当不错: 然而,当我点击524289时,物化视图就开始发挥作用,删除查询的成本就要高得多: 我通过在子选择查询中使用JOIN来解决这个问题: 然而,我仍然有兴趣理解为什么materialize会大幅降低性能。

  • 我有一张大约有一百万行的桌子。我们的部分维护包括每天删除旧行,但这需要大约40分钟。 delete语句是: 我能做些什么来提高性能吗? 谢谢 根据要求: ([cder\u ID]ASC)在[PRIMARY]上具有(PAD\u INDEX=OFF,STATISTICS\u NORECOMPUTE=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,AL

  • 问题内容: 我知道您可以定义overflow:hidden; 在HTML主体上删除滚动条,但我仍然希望能够使用鼠标上的箭头或滚轮滚动。 在此先感谢您的帮助。 编辑:感谢您对悬停滚动条和自定义栏上的所有建议。另外,感谢您担心通过删除滚动条来影响用户体验。我会详细说明,以便您解释我的来历。 我有一个圆形页面(如果您使用滚轮或箭头按钮滚动,当到达底部时,它将重置为页面顶部并重新开始)。永无止境的循环。滚

  • 本文向大家介绍SQLServer地址搜索性能优化,包括了SQLServer地址搜索性能优化的使用技巧和注意事项,需要的朋友参考一下 这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享。 1.需求  1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内。  1.2 数据库地址表结构和数据:  表TBAddress    表数据    1.3 例子:

  • 我知道你可以定义溢出:隐藏;在HTML的正文中删除滚动条,但我希望仍然能够用鼠标上的箭头或滚轮滚动。 提前感谢您的帮助。 编辑:感谢您有关悬停滚动条和自定义栏的所有建议。还要感谢您对通过删除滚动条影响用户体验的所有疑虑。我将更详细地阐述一下,以便您解释我来自哪里。 我有一个圆形页面(如果你用滚轮或箭头按钮滚动,当它到达底部时,它会重置到页面顶部并重新开始)。一个永无止境的循环。滚动条会影响这个,因