【发布时间】:2017-06-16 14:15:00
【问题描述】:
当我从我的一个表中删除索引时,SQL Server 引擎端会发生什么?
详细信息:我有一个数据库正在投入生产。
在这个数据库中,我有一个定期创建死锁的查询。我找到了创建死锁的查询,在我的计算机上运行它,显示了它的执行计划。 SQL Server Management Studio 建议在一个特定的表上添加索引。
索引对我来说很有意义,但我的问题是,在这张表上我已经有 3 个索引,老实说,我不确定它们是否被正确使用,或者它们是否是为特定角色创建的.
我可以简单地在表上再添加一个索引,但我担心每次在表上添加/更新/删除数据时要支付的费用。
我在我的机器上做了一些尝试,似乎我需要删除至少两个其他索引才能让引擎选择我今天创建的索引(对我来说看起来很奇怪)。一旦我强制引擎获取我的索引(因为我删除了其他所有内容),查询的运行速度就会快 10 倍。
我可以简单地使用DROP Index 命令吗?我不需要重建什么的?
【问题讨论】:
-
可以删除无用的索引,但也可以给force sql server to use a specific index添加查询提示
-
让我想起了最近的这条@TrumpDBA 推文
标签: sql-server tsql sql-server-2008-r2 non-clustered-index