Oracle SQL - 检查SQL查询中缺失的索引

问题描述:

我需要检查查询中是否缺少索引或索引。Oracle SQL - 检查SQL查询中缺失的索引

对于表中的索引检查我使用的语法:

SELECT index_name 
    , column_position 
    , column_name 
    FROM user_ind_columns 
WHERE table_name = 'table_name' 
ORDER BY index_name, COLUMN_POSITION; 

SELECT index_name 
FROM user_indexes 
WHERE table_name = 'table_name'; 

它可以使用一个程序或SQL脚本来自动发现,如果缺少一个查询索引和显示它创造呢?

谢谢!

+0

你所谈论的EXPLAIN计划? –

不是。检查execution plan会告诉你优化器将使用哪些索引(如果有的话);但如果该计划没有显示索引,则可能是

  1. 没有索引。
  2. 有索引但它们不能用于特定的查询。
  3. 有技术上可以使用的索引,但优化程序计算出它们不会提高性能。

在#3的情况下,它总是有可能是错误的(例如,由于不正确的统计信息或超出优化器准确建模的查询)。如果这是你正在寻找的情况,那么没有简单的方法来检测它。

您可能会在dbms_sqltune看到自动调整建议。它通常会告诉你收集统计信息,或者有时会建议一个SQL配置文件或一个新的索引。您可以从企业管理器或脚本调用它:

http://www.williamrobertson.net/documents/automated-sql-tuning-advice.html http://www.williamrobertson.net/documents/automated-sql-tuning-advice-sqlid.html