近日查看數據庫運行較長的語句,發現我們這邊的開發人員真是厲害,不懂裝懂的本領真高。 開發以為只要走索引就是快的,而且剛好知道index hint可以強制走索引,所以就用上了。可是走的是bitmap index full scan,把整個索引都掃描了,然后根據索引的位圖轉化
近日查看數據庫運行較長的語句,發現我們這邊的開發人員真是厲害,不懂裝懂的本領真高。
開發以為只要走索引就是快的,而且剛好知道index hint可以強制走索引,所以就用上了。可是走的是bitmap index full scan,把整個索引都掃描了,然后根據索引的位圖轉化(bitmap conversion to rowids)成rowid,再根據索引的rowid和表的rowid一一對應,從表中取得數據(table access by index rowid)。
既然是從索引中的所有rowid找到表中的所有的數據,為啥不直接掃描整個表,直接掃描整個表不是更快嗎?不要當oracle是傻的,我把index hint去掉之后,走得是全表掃描,這就對了嘛。
讀索引是單塊讀,回表也是單塊讀。一次的單塊讀和多塊讀時間上是差不多的,顯然多塊讀一次掃描的塊數更多。
至于優化的話就簡單了,去掉index hint就可以了,如果表大的話就加并行就ok了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com