sql-server – 删除未使用的索引 – 评估意外的危险
根据DMV统计数据,我们有一个非常大的数据库,其中包含数百个未使用的索引,自7月份服务器上次重新启动以来,这些数据一直在累积.我们的一位DBA做了以下警示性陈述,对我来说没有意义:
>在我们删除索引之前,我们需要确保它是否强制执行 关于#1,在我看来,SQL Server实际上会在索引上进行搜索以确定插入/更新完成之前的唯一性,因此,索引不会显示为未使用. 关于#2,这真的有可能吗? 顺便说一句,当我说没有使用索引时,我的意思是没有搜索,也没有扫描. 解决方法您的DBA的担忧是有效的.
优化器可以使用唯一性保证来决定可以使用哪些逻辑转换或物理操作来获得正确的结果.优化程序依赖唯一性保证(例如,转换聚合或选择一对多合并连接)这一事实不会反映在索引使用情况统计中,除非在最终执行计划中也物理访问索引.因此,应该非常小心地删除(或禁用)任何唯一索引或约束.
是的,优化器可以使用与索引关联的统计信息,而最终执行计划不包含使用该索引的任何访问.加载“有趣”统计数据,计算基数估计值和生成完成执行计划的过程是完全独立的活动. 删除索引也会删除关联的索引统计信息,这可能会在下次重新编译语句时影响计划质量.索引统计可以用在最终计划所依赖的基数估计计算中,即使索引实际上不存在于最终计划中也是如此. 你的DBA知道他/她的东西. 这些都不应被视为意味着永远不应删除明显未使用的索引.我只是说你的DBA的问题是有效的,你应该通过适当的测试和恢复计划相应地计划变更.根据我的经验,#1点比#2更容易出问题,但我无法知道这是否适用于您的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |