【问题标题】:SQL Server 2005 Clustered Index Drop running long with no non-clustered indexes presentSQL Server 2005 聚集索引删除运行时间长且不存在非聚集索引
【发布时间】:2011-10-03 18:10:50
【问题描述】:

我正在从 SQL Server 2005 数据库中的表中删除一个聚集索引,它需要很长时间才能运行。

我做了一些研究并确定删除聚集索引可能需要很长时间,因为它正在更新非聚集索引中的指针以引用表本身的 RowID,但是在这种特定情况下没有非聚集索引放在桌子上。

数据库中有很多外键,因此其中一个可能引用了聚集索引 ID。

有什么方法可以确定哪些对象使用聚集索引引用而不是 RowID?

【问题讨论】:

    标签: sql-server sql-server-2005 clustered-index


    【解决方案1】:

    如果有聚集索引,则一切都使用它而不是 RowID - 聚集索引键 IS 是行标识符。

    所以答案是,任何引用该表的东西。

    【讨论】:

    • 有没有办法得到这些对象的列表?
    • @David - 你可以查看sys.sysdepends 来检查依赖关系。
    • 我查看了 sysdepends,并且有一个来自存储过程的对带有相关聚集索引的表的引用。
    • @David - 您也可以查看sp_who2 active 以确保没有任何东西阻碍您。如果它是一张大桌子,它可能只需要很长时间。有多大?
    • 我在开发盒上做这个,所以没有其他活跃用户。在我对脚本感到满意并进行更多测试后,我最终会将其部署到生产环境中。整体表大小在 Dev 中为 246GB,在 Prod 中为 600(开发环境仅包含生产数据的样本)
    【解决方案2】:

    查看外键约束的一种简单、直观的方法是将表添加到图表中。然后您可以查看关系并检查是否有任何关系指向聚集索引。

    但是,您删除聚集索引(很可能是主键)的原因是什么?

    【讨论】:

    • 表是分区的,分区上没有创建聚集索引,所以需要重新设计索引。因为有问题的表非常大,我正在尝试确定是否有任何简单的方法可以加快操作。
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 2012-10-01
    • 2018-05-08
    • 2014-04-27
    • 2013-03-22
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多