Cat*_*lin 4 sql oracle indexing plsql
我需要检查查询中是否缺少一个或多个索引。
为了检查表中的索引,我使用语法:
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';
Run Code Online (Sandbox Code Playgroud)
是否可以使用程序或 SQL 脚本自动查找查询中是否缺少索引并显示它以创建它们?
谢谢!
并不真地。检查执行计划将告诉您优化器将使用哪些索引(如果有);但如果计划显示没有索引,则可能是这样
在#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
小智 5
使用 Oracle 自治数据库,您可以启用自动索引。自动索引可自动执行索引管理任务,并且无需根据您的工作负载模式适当创建、维护和停用/不使用索引的知识和专业知识。
启用自动索引
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
Run Code Online (Sandbox Code Playgroud)
禁用自动索引
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅 Oracle 文档中的自动索引。