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脚本来自动发现,如果缺少一个查询索引和显示它创造呢?
谢谢!
答
不是。检查execution plan会告诉你优化器将使用哪些索引(如果有的话);但如果该计划没有显示索引,则可能是
- 没有索引。
- 有索引但它们不能用于特定的查询。
- 有技术上可以使用的索引,但优化程序计算出它们不会提高性能。
在#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
你所谈论的EXPLAIN计划? –