当我从我的一个表中删除索引时,SQL Server 引擎端会发生什么?
详细信息:我有一个正在投入生产的数据库。
在这个数据库中,我有一个定期创建死锁的查询。我发现了造成死锁的查询,在我的电脑上运行它,显示了它的执行计划。 SQL Server Management Studio 建议在一个特定表上添加索引。
索引对我来说很有意义,但我的问题是,在这张表上我已经有 3 个索引,老实说,我不能确定它们是否被正确使用或者它们是否是为特定角色创建的.
我可以简单地在表上再添加一个索引,但我担心每次在表上添加/更新/删除数据时需要支付的费用。
我在我的机器上做了几次尝试,似乎我需要删除至少两个其他索引才能让引擎选择我今天创建的索引(对我来说看起来很奇怪)。一旦我强制引擎获取我的索引(因为我删除了所有其他内容),查询运行速度就会快 10 倍。
我可以简单地使用 DROP Index
命令吗?我不需要重建或任何东西?
最佳答案
非聚集索引是一种辅助数据结构 - 它没有“集成”到聚集索引或堆的主要数据结构中。
因此,删除一个应该是一种相对快速且无痛苦的体验,因为系统需要做的就是删除有关索引的元数据并将索引的页面标记为未分配。
应该不需要“重建”或做任何其他事情。
关于sql-server - 删除非聚集索引时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952567/