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

          oracle 不走索引的幾種情況

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

          1、建立組合索引,但查詢謂詞并未使用組合索引的第一列,此處有一個INDEX SKIP SCAN概念。
          2、在包含有null值的table列上建立索引,當時使用select count(*) from table時不會使用索引。
          3、在索引列上使用函數時不會使用索引,如果一定要使用索引只能建立函數索引。
          4、當被索引的列進行隱式的類型轉換時不會使用索引。如:select * from t where indexed_column = 5,而indexed_column列建立索引但類型是字符型,這時Oracle會產生
          隱式的類型轉換,轉換后的語句類似于select * from t where to_number(indexed_column) = 5,此時不走索引的情況類似于case3。日期轉換也有類似問題,如:
          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 有時會更快,尤其是當查詢的數據量占整個表的比重較大時,因為full scan table采用的是多塊讀,
          當Oracle優化器沒有選擇使用索引時不要立即強制使用,要充分證明使用索引確實查詢更快時再使用強制索引。

          6、<>

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

          8、not in ,not exist. 

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


          網站導航:
           
          主站蜘蛛池模板: 邵东县| 门源| 石泉县| 宁蒗| 遵义市| 长乐市| 西和县| 和平县| 新和县| 荥经县| 屯昌县| 阜新| 任丘市| 连城县| 濮阳市| 三亚市| 崇阳县| 宝鸡市| 剑阁县| 安乡县| 上栗县| 大连市| 阜平县| 永昌县| 内黄县| 莆田市| 军事| 类乌齐县| 陆川县| 海阳市| 侯马市| 林州市| 申扎县| 长春市| 田东县| 盈江县| 海淀区| 崇明县| 太康县| 兴文县| 宜宾县|