<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 188,comments - 176,trackbacks - 0

    Like SQL語(yǔ)句的優(yōu)化的一個(gè)小測(cè)試

    1.盡量不要使用 like '%..%'

    2.對(duì)于 like '..%..' (不以 % 開頭),Oracle可以應(yīng)用 colunm上的index

    3.對(duì)于 like '%...' 的 (不以 % 結(jié)尾),可以利用reverse + function index 的形式,變化成 like '..%'

    具體的測(cè)試流程: (測(cè)試工具:PLSQL Developer)


    [1] '建測(cè)試表和Index,注意,重點(diǎn)在于帶reverse的function index。同時(shí),一定要使用CBO才行。

    已連接到 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    已連接為 zxdbm_ismp

    SQL> select reverse('123') from dual;

    REVERSE('123')
    --------------
    321

    SQL> create table test_like as select object_id,object_name from dba_objects;

    Table created.

    SQL> create index test_like_name on test_like(object_name);

    Index created.

    SQL> create index test_like_name_reverse on test_like(reverse(object_name));  --建反向索引

    Index created.

    SQL> analyze table test_like compute statistics for table for all indexes;

    Table analyzed.

    SQL> set autotrace trace exp

     

    [2] '常量開頭的like , 會(huì)利用index ,沒(méi)問(wèn)題…… '

    SQL> select * from test_like where object_name like 'AS%';

    Execution Plan

    ----------------------------------------------------------

    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)

    2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)

     

    [3] '開頭和結(jié)尾都是 % ,對(duì)不起,很難優(yōu)化'

    SQL> select * from test_like where object_name like '%%';


    Execution Plan

    ----------------------------------------------------------

    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

    1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)

     

    [4] '以常量結(jié)束,直接寫的時(shí)候是不能應(yīng)用index的'

    SQL> select * from test_like where object_name like '%S';

    Execution Plan

    ----------------------------------------------------------

    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)

    1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)

     

    [5] '以常量結(jié)束的,加個(gè)reverse 函數(shù),又可以用上index了'(需要反向索引的支持)

    SQL> select * from test_like where reverse(object_name)like reverse('%AS');

    Execution Plan

    ----------------------------------------------------------

    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)

    1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)

    2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)



    轉(zhuǎn):http://rollingpig.itpub.net/category/81/30081
    posted on 2008-01-23 15:58 cheng 閱讀(4304) 評(píng)論(2)  編輯  收藏 所屬分類: Oracle

    FeedBack:
    # re: Like SQL語(yǔ)句的優(yōu)化[未登錄](méi)
    2008-04-21 10:33 | paul
    [5] '以常量結(jié)束的,加個(gè)reverse 函數(shù),又可以用上index了'
    我試了下怎么不管用啊  回復(fù)  更多評(píng)論
      
    # re: Like SQL語(yǔ)句的優(yōu)化
    2008-04-21 21:00 | cheng
    @paul
    select * from test_like where reverse(object_name)like reverse('%AS');
    需要建立對(duì)object_name的反向索引才行的。  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 一区二区三区免费在线视频| 亚洲中文字幕AV每天更新| 一级免费黄色大片| 国产免费观看黄AV片| CAOPORN国产精品免费视频| 免费一级肉体全黄毛片| 在线91精品亚洲网站精品成人| 成人免费乱码大片A毛片| 一二三四视频在线观看中文版免费| 久久久久亚洲精品无码网址 | 免费的全黄一级录像带| 亚洲成A人片777777| 黄网站在线播放视频免费观看| 最好看最新的中文字幕免费| 亚洲国产午夜福利在线播放| 91在线亚洲综合在线| 成人av片无码免费天天看| 亚洲伊人色欲综合网| 久久久久久国产精品免费无码| 亚洲小视频在线播放| 女人18毛片水最多免费观看| 日韩在线视精品在亚洲| 色久悠悠婷婷综合在线亚洲| 99视频有精品视频免费观看| 亚洲欧洲美洲无码精品VA| 四虎国产成人永久精品免费| 亚洲sss综合天堂久久久| 国产精品成人无码免费| 97在线免费观看视频| 亚洲人成免费网站| 1000部啪啪毛片免费看| 久久91亚洲精品中文字幕| 中文字幕av免费专区| 中文字幕亚洲精品资源网| 免费无码毛片一区二区APP| 亚洲人成人网毛片在线播放| 高清在线亚洲精品国产二区| 久久99国产综合精品免费| 亚洲爆乳无码精品AAA片蜜桃| 免费看大美女大黄大色| 插鸡网站在线播放免费观看|