根据DMV统计数据,我们有一个非常大的数据库,其中包含数百个未使用的索引,自从服务器在7月最后一次重新启动以来,该索引一直在累积。我们的一名DBA做出了以下警告性声明,这对我来说没有意义:
- 在删除索引之前,我们需要确定它是否不执行唯一性约束,因为查询优化器可能需要该索引存在。
- 每当创建索引时,都会在SQL Server中创建与该索引相关的统计信息。查询可能未使用索引,但可能正在使用其统计信息。因此,我们可能会遇到这样的情况:在删除索引之后,特定的查询性能会变得很差。SQL Server不保留统计信息的使用情况统计信息。尽管我们在数据库上启用了“自动创建统计信息”功能,但是我不知道在查询优化器创建丢失的统计信息之前必须在内部满足哪些所有参数。
关于#1,在我看来,SQL Server实际上会在完成插入/更新之前对索引进行一次搜索以确定唯一性,因此,该索引不会显示为未使用。
关于#2,这真的有可能吗?
顺便说一句,当我说不使用索引时,我的意思是没有搜寻也没有扫描。
3
当您绝对确定即使使用年终报告也不会使用该索引时,建议您禁用该索引。
—
Kin Shah