<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 '..%..' (不以 % 開(kāi)頭),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] '常量開(kāi)頭的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] '開(kāi)頭和結(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é)束,直接寫(xiě)的時(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 閱讀(4309) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): 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)論
      
    主站蜘蛛池模板: jizzjizz亚洲日本少妇| 亚洲无线一二三四区| 国产成人人综合亚洲欧美丁香花| 最近中文字幕完整版免费高清| 亚洲AV永久无码区成人网站| 中国一级毛片视频免费看| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 三年片在线观看免费| 亚洲欧洲无码AV电影在线观看| 国产免费人成视频尤勿视频| 久久久久亚洲AV综合波多野结衣 | 67pao强力打造67194在线午夜亚洲 | 免费国产a国产片高清| 免费国产高清毛不卡片基地| 国产成人99久久亚洲综合精品| 一出一进一爽一粗一大视频免费的 | 色视频在线观看免费| 国产精品亚洲综合专区片高清久久久| 一区二区三区免费视频观看| 国产aⅴ无码专区亚洲av| 最近中文字幕完整版免费高清| 亚洲真人无码永久在线观看| 国产精品成人无码免费| 国产精品美女久久久免费| 亚洲男人天堂2017| 最近的中文字幕大全免费版| 男性gay黄免费网站| 久久亚洲国产精品五月天| 免费精品国偷自产在线在线| 午夜在线亚洲男人午在线| 久久亚洲国产午夜精品理论片| 精品国产无限资源免费观看| 日韩成人精品日本亚洲| 国产成人亚洲综合色影视| 99在线精品免费视频九九视| 黄色网址免费在线| 久久亚洲日韩精品一区二区三区| 成人免费无遮挡无码黄漫视频| g0g0人体全免费高清大胆视频| 亚洲精品午夜视频| 亚洲AV无码成人精品区大在线 |