[英]Oracle SQL - check missing indexes on SQL query
我需要檢查查詢中是否缺少索引或索引。
對於表中的檢查索引,我使用語法:
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 腳本自動查找查詢中是否缺少索引並顯示它以創建它們?
謝謝!
並不是的。 檢查執行計划將告訴您優化器將使用哪些索引(如果有); 但是,如果計划未顯示任何索引,則可能是
在#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
這是一個很好的資源: https : //www.dba-scripts.com/scripts/diagnostic-and-tuning/troubleshooting/find-missing-index/
ACCEPT SCHEMA_NAME PROMPT 'Choose the schema to analyze:'
select * from (
select 'the column ' || c.name || ' of the table ' || us.name || '.' || o.name || ' was used ' || u.equality_preds || ' times in an equality predicate and ' || u.equijoin_preds || ' times in an equijoin predicate and is not indexed' as colum_to_index
from sys.col_usage$ u,
sys.obj$ o,
sys.col$ c,
sys.user$ us
where u.obj# = o.obj#
and u.obj# = c.obj#
and us.user# = o.owner#
and u.intcol# = c.col#
and us.name='&SCHEMA_NAME'
and c.name not in (select column_name from dba_ind_columns where index_owner ='&SCHEMA_NAME')
and (u.equality_preds > 100 OR u.equijoin_preds > 100)
order by u.equality_preds+u.equijoin_preds desc)
WHERE rownum <11;
我為索引建議(以及許多其他改進建議)找到的可靠方法是 OEM (Oracle Enterprise Manager) 中的 SQL Tuning Advisor。 它有時會為您的語句找到更好的計划,並將其添加到 SQL 配置文件中,您可以在dba_sql_profiles
下檢查該配置文件。
SQL Advisor 將以這種格式為您提供索引建議:
考慮運行 Access Advisor 以改進物理架構設計或創建推薦的索引。
<schema.table>(field list)
創建推薦索引顯着改善了該語句的執行計划。
您必須先運行您的 SQL,然后在您實例的 Top Activity 下的 OEM 中找到它,或者通過 SQL ID 搜索它。
使用 Oracle 自治數據庫,您可以啟用自動索引。 自動索引可自動執行索引管理任務,並且無需根據您的工作負載模式適當地創建、維護和停用/不使用索引方面的知識和專業知識。
啟用自動索引
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
禁用自動索引
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');
有關更多詳細信息,請參閱 Oracle 文檔中的自動索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.