国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Order by之索引優化

IT那活兒 / 589人閱讀
Order by之索引優化
更多精彩推薦,請關注我們


   通常我們會選擇在合適的謂詞條件列添加索引,以達到加速查詢的效果。今天給大家介紹下以orderby列創建索引加速查詢的例子,話不多說,往下看。

    首先我們利用dba_objects創建一個測試表如下:

create table test as select * from dba_objects;

--執行多次插入,讓數據量達到千萬級別

insert into test select * from test;

案例一

  表創建好后執行如下語句:

select* from (select * from test order by object_id) where rownum<=20;

  執行計劃如下圖,可以看到走的是全表掃描,執行時間17.58s。這也是意料之中的。

  當然我們已經說了今天介紹的是以orderby列創建索引加速查詢的例子,先把索引建上:

createindex index_tt on test(object_id);

  再次執行上述語句,發現執行計劃仍是全表掃描,sql執行效率沒有任何變化。在這里我們修改下object_id列的屬性為非空:

altertable test modify object_id not null;

  然后執行上述語句,執行計劃如下圖,可以發現現在使用到了我們剛剛創建的索引,sql執行時間只需0.13s,sql執行效率大幅提升。


案例二

  在實際生產中我們遇到的sql要比案例一復雜的多,接下來我們看一個復雜一點的案例:

selectobject_id,object_type from (select * from test where object_type like%TABLE% order by object_id) where rownum<=20;

  案例二中sql加了where條件,且我們可以條件的object_type列的選擇性非常差,不適合建立索引。執行上述語句后執行計劃如下,仍然使用到了我們剛剛建立在orderby列的索引。

  那么這條語句還有沒有優化空間呢,我們嘗試在object_id和object_type列建立復合索引如下:

createindex index_tt1 on test(object_id,object_type);

  再次執行上述案例語句,執行計劃走了剛剛創建的復合索引,執行效率也所有提升。


總結

  • 索引是有序的,而當sql中有order by時,可以考慮在order by字段列建立索引以提高語句執行效率;

  • 在Oracle中null被定義為無限大,且null不等于null,故在索引中不會存有與null值對應的條目,在上述案例中如果不修改object_id列屬性為not null,優化器無法確定該列是否有null值,優化器仍然會選擇全表掃描;

  • 當語句比較復雜且帶謂詞條件時,可以結合order by列建立復合索引。



發現“在看”和“贊”了嗎,戳我試試吧



文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130040.html

相關文章

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<