posts - 15, comments - 20, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          oracle 不走索引的幾種情況

          Posted on 2010-01-14 15:16 spinage 閱讀(2042) 評論(0)  編輯  收藏
           

          1、建立組合索引,但查詢謂詞并未使用組合索引的第一列,此處有一個INDEX SKIP SCAN概念。
          2、在包含有null值的table列上建立索引,當(dāng)時使用select count(*) from table時不會使用索引。
          3、在索引列上使用函數(shù)時不會使用索引,如果一定要使用索引只能建立函數(shù)索引。
          4、當(dāng)被索引的列進(jìn)行隱式的類型轉(zhuǎn)換時不會使用索引。如:select * from t where indexed_column = 5,而indexed_column列建立索引但類型是字符型,這時Oracle會產(chǎn)生
          隱式的類型轉(zhuǎn)換,轉(zhuǎn)換后的語句類似于select * from t where to_number(indexed_column) = 5,此時不走索引的情況類似于case3。日期轉(zhuǎn)換也有類似問題,如:
          select * from t where trunc(date_col) = trunc(sysdate)其中date_col為索引列,這樣寫不會走索引,可改寫成select * from t where date_col >= trunc(sysdate)
          and date_col < trunc(sysdate+1),此查詢會走索引。
          5、并不是所有情況使用索引都會加快查詢速度,full scan table 有時會更快,尤其是當(dāng)查詢的數(shù)據(jù)量占整個表的比重較大時,因?yàn)閒ull scan table采用的是多塊讀,
          當(dāng)Oracle優(yōu)化器沒有選擇使用索引時不要立即強(qiáng)制使用,要充分證明使用索引確實(shí)查詢更快時再使用強(qiáng)制索引。

          6、<>

          7、like’%dd’百分號在前

          8、not in ,not exist. 

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 子洲县| 平陆县| 靖安县| 池州市| 伊金霍洛旗| 抚州市| 荥经县| 汾阳市| 龙里县| 辛集市| 阜宁县| 连云港市| 永康市| 闽侯县| 闻喜县| 农安县| 玛纳斯县| 澳门| 江华| 五峰| 越西县| 全南县| 宽城| 昭通市| 丽水市| 望都县| 老河口市| 江阴市| 青神县| 汾西县| 内黄县| 花莲市| 山东省| 绍兴市| 巴塘县| 色达县| 腾冲县| 砚山县| 贵阳市| 揭东县| 楚雄市|