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