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