select * from XXCNN_AR_FIN016_MONTH_END
where period_name like '%-15'
我試圖在列期間名稱上創建索引,但成本不會降低。
此查詢的成本為 12702。
創建索引后,解釋計劃將選項顯示為存盤已滿。為此我想問你一個問題:創建索引后,為什么不顯示索引掃描或其他掃描?
我如何減少成本和時間?
uj5u.com熱心網友回復:
恐怕資料太少,無法回答。
但是,您沒有說明您創建了什么樣的索引。您是否嘗試過基于函式的索引?
CREATE INDEX i1_xx
ON xxcnn_ar_fin016_month_end (SUBSTR (period_name, -2));
并將查詢重寫為
SELECT *
FROM xxcnn_ar_fin016_month_end
WHERE SUBSTR (period_name, -2) = '15';
uj5u.com熱心網友回復:
如果在 LIKE 模式中指定了前導字符,則可以使用索引(對于像“51-%”這樣的模式)。
解決方案是使用 REVERSE 函式創建函式索引
CREATE INDEX IDX_XXCNN_AR_FIN016_MONTH_END_reverse ON XXCNN_AR_FIN016_MONTH_END(REVERSE(period_name ));
然后像這樣查詢:
select * from XXCNN_AR_FIN016_MONTH_END
where REVERSE(period_namex) like REVERSE('%-15');
Oracle 將識別查詢謂詞中的 REVERSE() 函式并將使用索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380996.html
