sql-server - 删除非聚集索引时会发生什么?

标签 sql-server tsql sql-server-2008-r2 non-clustered-index

当我从我的一个表中删除索引时,SQL Server 引擎端会发生什么?

详细信息:我有一个正在投入生产的数据库。

在这个数据库中,我有一个定期创建死锁的查询。我发现了造成死锁的查询,在我的电脑上运行它,显示了它的执行计划。 SQL Server Management Studio 建议在一个特定表上添加索引。

索引对我来说很有意义,但我的问题是,在这张表上我已经有 3 个索引,老实说,我不能确定它们是否被正确使用或者它们是否是为特定角色创建的.

我可以简单地在表上再添加一个索引,但我担心每次在表上添加/更新/删除数据时需要支付的费用。

我在我的机器上做了几次尝试,似乎我需要删除至少两个其他索引才能让引擎选择我今天创建的索引(对我来说看起来很奇怪)。一旦我强制引擎获取我的索引(因为我删除了所有其他内容),查询运行速度就会快 10 倍。

我可以简单地使用 DROP Index 命令吗?我不需要重建或任何东西?

最佳答案

非聚集索引是一种辅助数据结构 - 它没有“集成”到聚集索引或堆的主要数据结构中。

因此,删除一个应该是一种相对快速且无痛苦的体验,因为系统需要做的就是删除有关索引的元数据并将索引的页面标记为未分配。

应该不需要“重建”或做任何其他事情。

关于sql-server - 删除非聚集索引时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952567/

相关文章:

sql-server - 在 Windows 7 上,我的 VB6 应用程序看不到 'System' DSN,但可以轻松找到 'User' DSN

sql - 上个月的最后一天 - BigQuery

sql-server - 简化(别名)T-SQL CASE 语句。有什么改进的可能吗?

sql - 如何通过排序、分区和分组进行行编号

c# - 如何监听 SQL Server 数据库更改

按星期几(或日期减 7)的 SQL 滚动平均值

sql - 如何使用存储过程在sql server 2008中拆分字符串并将数据插入表

java - 无法解决 "java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index"错误

从两个 Select 语句返回重叠的 SQL 语句

sql - BULK INSERT 内部如何工作?