資源描述:
《使用合適的聯(lián)合索引》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、我們通常會去建一些聯(lián)合索引來支持復(fù)雜的sql語句,以便查詢更加有效,索引中包含多個字段,字段先后順序的不同常常會導(dǎo)致巨大的性能差異??聪旅娴睦樱?.聯(lián)合索引的定義crmidx_det_sta_dealstatus1validtbs_crm_indcrmidx_det_sta_dealdeal_id2validtbs_crm_indcrmidx_det_sta_dealgmt_create3validtbs_crm_indcrmind_det_sta_gmtcrstatus1validtbs_crm_indcrmind_det_sta_gmtcrgmt_create2vali
2、dtbs_crm_indcrmind_det_sta_gmtcrdeal_id3validtbs_crm_ind2.sql分別使用兩個索引的效率SQL>setautottraceonlySQL>selectcount(*)2fromcrm_detailt3wheret.status=1andt.gmt_create>(sysdate-5);ExecutionPlan----------------------------------------------------------SELECTSTATEMENTOptimizer=CHOOSE(Cost=10Card=1Byte
3、s=11)0SORT(AGGREGATE)1INDEX(RANGESCAN)OF'IND_DETAIL_STA_GMTCREATE'(NON-UNIQUE)(Cost=23Card=20297Bytes=223267)Statistics----------------------------------------------------------0recursivecalls0dbblockgets30consistentgets17physicalreads0redosize492bytessentviaSQL*Nettoclient655bytesreceivedv
4、iaSQL*Netfromclient2SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)1rowsprocessed--指定另一個索引SQL>select/*+index(tIDX_DET_STA_DEAL)*/count(*)2fromcrm_detailt3wheret.status=1andt.gmt_create>(sysdate-5);ExecutionPlan----------------------------------------------------------SELECTSTATEMEN
5、TOptimizer=CHOOSE(Cost=1038Card=1Bytes=11)0SORT(AGGREGATE)1INDEX(RANGESCAN)OF'IDX_DET_STA_DEAL'(NON-UNIQUE)(Cost=2595Card=20297Bytes=223267)Statistics----------------------------------------------------------0recursivecalls0dbblockgets3650consistentgets0physicalreads0redosize492bytessentvia
6、SQL*Nettoclient655bytesreceivedviaSQL*Netfromclient2SQL*Netroundtripsto/fromclient0sorts(memory)0sorts(disk)1rowsprocessed通過試驗我們可以看出,索引字段位置稍一調(diào)整,邏輯讀就相差了100倍左右。這篇其實沒有什么含義,只是提醒大家建聯(lián)合索引時要細(xì)心一點,多去衡量sql查詢條件(通常索引會支持很多個查詢),衡量索引所包含字段的數(shù)據(jù)分布,衡量字段順序不同帶來的影響,以便建立出更有效的聯(lián)合索引。--EOF--評論:1.?1丁原例子舉得不好。我應(yīng)該通過status+
7、gmt_create,gmt_create+status分別來建立索引,這樣就好比對了,看起來也會清楚很多。我們經(jīng)常會遇到一個索引包含多個字段,服務(wù)于多個查詢sql,這時候就要評估一下關(guān)鍵字段的先后順序。CommentonSep14th,2008at9:14am??1.?2orpheanwheret.status=1andt.gmt_create>(sysdate-5);針對這個查詢條件,crmind_det_sta_gmtcrstatus1validtbs_crm_indcrmind_det_sta_