创建索引然后删除它是否会使数据库返回到索引创建前的状态?

Sid*_*ney 9 index sql-server index-tuning

我正在测试一些索引,并希望对哪些索引表现更好(主要是索引中字段的顺序和指定的其他字段)进行一些 AB 测试。

我有正在测试的数据库的备份,但该备份需要很长时间才能恢复。我更希望能够创建索引 foo,收集性能指标,然后删除 foo 以将数据库返回到索引前状态并创建索引 bar。这是索引创建的工作方式,还是索引的创建会以某种方式改变表,而删除索引无法撤消?

J.D*_*.D. 9

更长

表上的索引更改(创建、重建、删除等)会使计划缓存中的任何相关计划失效,并导致下次执行相关查询时重新编译新计划。

如果数据库的数据在原始计划被缓存和新计划重新编译之间发生了变化,则可能会生成与原始计划不同的计划。

实际上,由于您只是对数据库副本进行 A/B 测试,而我假设数据库副本不会主动更改,那么是的,Erik是准确的。删除索引很可能会导致在后续运行时为您的查询缓存相同的原始执行计划 - 这意味着您的数据库将有效地返回到之前的状态。


Pau*_*ite 7

选择

对于此类测试,我喜欢使用数据库快照

在测试环境中,当重复运行数据库测试协议以在每轮测试开始时包含相同的数据时,它会很有用。在运行第一轮之前,应用程序开发人员或测试人员可以在测试数据库上创建数据库快照。每次测试运行后,可以通过恢复数据库快照将数据库快速返回到之前的状态。

请参阅链接文档了解确切的语法和需要注意的事项。

在 SQL Server 2016 Service Pack 1 之前,此功能需要企业版。从那时起,它已出现在每个版本中。


Eri*_*ing 5

短的

删除索引足以将表重置为其之前的状态。如果禁用索引,为其创建的统计信息仍可用于基数估计。