如何解决如何在给定查询中排除某些索引以查看该索引的影响 索引提示禁用索引
假设我在一个表上有多个索引
我想在执行查询时仅排除其中的一个
假设我的索引名为index_a
,index_b
,index_c
查询为select * from myTable where columnA='var1'
那么如何才能从此查询中仅排除index_b
?
此处的目的是测试索引的影响。因此,我将在同一查询上运行两次查询。在第一个查询中,我将启用索引,在第二个查询中,我将禁用索引。因此,包含实际执行计划将向我显示它们与批处理查询成本的相对关系
我正在举个例子(实际情况要复杂得多)
解决方法
选项:
- 索引提示(多个索引提示不是一个好主意,请参见link)
- 禁用索引
- 删除索引(不建议将其用于测试,它可能是一个大表,需要一些时间来重新创建索引)
- 复制架构和数据,但要排除的索引除外。 (相关性不高,因为新创建的索引的统计信息会有所不同)
索引提示
您可以尝试使用特定索引执行查询以测试差异:
select *
from myTable WITH (INDEX(index_a)) -- or index_b or index_c
where columnA='var1'
或具有多个提示:
select *
from myTable WITH (INDEX(index_a,index_c)) -- Bad idea,only for testing.
where columnA='var1'
您还可以在JOIN上指定索引提示,请参见table hints和query hints
的文档。禁用索引
要禁用索引:
ALTER INDEX index_b ON myTable
DISABLE;
要启用索引,请参见documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。