Oracle中建立時間字段索引后衍生出來的問題


       默認的大家可能都認為字段上加了函數,索引都會失效,然而也有特殊情況。

       我就講講我遇到的問題吧,希望有大佬后續講其中的奧秘。

       我在時間字段created_time上創建了普通索引,然后做百萬級表關聯查詢的時間,加上時間區間去查看某一個時間段的數據並根據時間降序排序。Oracle庫中時間字段created_time定義的類型為Date類型,我在用條件created_time between to_date('2020-07-01','yyyy-MM-dd') and to_date('2020-08-01','yyyy-MM-dd')查詢時,看了執行計划,然而並沒有走索引,而且查詢時間用了3s多,初步排查下來是因為查詢區間的數據量過大導致不走索引,然后我縮小時間區間,確實走索引了,查看執行計划索引的掃描策略為RANGE SCAN,但是感覺並沒有快多少。

       緊着我改了下查詢語句,使用了函數對created_time字段處理,如to_char(created_time,'yyyy-MM-dd') between '2020-07-01' and '2020-08-01',查看執行計划也使用到索引了,索引的掃描策略為FULL SCAN DESCENDING然后再看下執行時間,直接變成0.05s,簡直不可思議。

       目前排查下來我的總結就是:Oracle中如果索引掃描策略為FULL SCAN DESCENDING的查詢語句比索引掃描策略為RANGE SCAN快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM