有没有办法找出哪些查询受益于特定索引?
我已经使用了 DMV 视图,并且我知道该索引正在生产中使用,但是如果有一种方法可以获取受到积极影响的查询列表,这样我就可以决定每个索引是否值得保留。
编辑:我正在使用 SQL Server
谢谢你的帮助!
从 Oracle 的角度讲:在 Oracle 中,我可以检查查询计划,该计划提供了足够的信息来猜测是否使用了索引。请记住,优化器根据手头的 SQL 做出决策。对于索引的永久使用或不使用没有硬性规定。因此,即使您发现某个索引是否正在使用,您也可以[几乎] 始终修改查询,以便相反的情况发生!
说到积极影响:同样,它只会告诉你目前的情况。例如,表没有足够的记录,全表扫描可能比使用索引更快(由于涉及开销)。但是如果情况发生变化(例如,更多的记录被输入到该表中)怎么办?
底线:仅通过查看优化器今天决定的内容或数据库此时维护的统计信息,很难永久做出这些决定。您对数据、其设计和结构以及如何查询数据的了解将是做出这些决定的真正关键。
我的猜测是你问这个问题是因为你有很多索引并且你想摆脱一些。除非数据快速变化,否则维护索引的开销很小(存储很便宜!)。如果是这种情况,我们希望优化器足够聪明,可以根据成本决定使用或不使用索引... :-)