SQL優化案例-分割槽索引之無字首索引(六)
SQL文字如下,跨分割槽查詢,分割槽欄位post_date(為保證客戶隱私,已經將註釋和文字部分去掉):
跨30個分割槽執行了6分鐘。
SELECT /*+index(I IND_DATE_CORRE_AMOUNT_CODE)*/ I.POST_DATE AS JYRQ, --I.ACCT_NO AS ZH, NVL((SELECT S.ACCT_NO_DESC || S.ACCT_NO_ALL2 FROM INVM_ZMQ S WHERE S.ACCT_NO=I.ACCT_NO AND S.ZHLB='3'),I.ACCT_NO) AS ZH, (SELECT C.CUSTOMER_NAME FROM CB_ACCT C WHERE C.SYS_ID='INV' AND C.ACCT_NO=I.ACCT_NO) AS HM, I.TRAN_CODE AS JYDM, (SELECT SUBSTR(J.PROFIT_NARR,3,3) FROM JR01_01 J WHERE J.POST_DATE=I.POST_DATE AND J.JRNL_NO=I.JRNL_NO AND J.ACCT_NO=I.ACCT_NO AND ROWNUM=1 ) AS XJFXH, NVL((SELECT S.CURRENCY FROM INVM_ZMQ S WHERE S.ACCT_NO=I.ACCT_NO),I.CURRENCY) AS BZ, ABS(I.INCT_01_AMOUNT) AS JYJE, I.TELLER_NO AS CZY FROM INCT_01 I WHERE I.POST_DATE BETWEEN TO_DATE('2018-04-01','YYYY-MM-DD') AND TO_DATE('2018-04-30','YYYY-MM-DD') AND I.TRAN_BRANCH IN (SELECT JGM FROM JGDY WHERE JGDY.JGM='0500' OR SJJGM='0500') AND I.INCT_01_CORRECTION!='1' AND ABS(I.INCT_01_AMOUNT)*(SELECT HL FROM BBHL B WHERE B.STARTDATE<=I.POST_DATE AND B.ENDDATE>I.POST_DATE AND B.YB=I.CURRENCY AND ZB='CNY')>=NVL2('',0,50000) AND EXISTS (SELECT CB_EDP.TRAN_CODE FROM CB_EDP WHERE TRAN_CODE=I.TRAN_CODE AND CA_FLAG='0' AND CT_FLAG!='1' AND CD_FLAG='0');
執行計劃:
檢視索引,包含了分割槽欄位,且少了TRAN_BRANCH列。
建立索引:
1
2
|
CREATE
INDEX
IND_TRAN_CORRECTION_ABS_TRAN
ON
INCT_01 (TRAN_BRANCH,INCT_01_CORRECTION,
ABS
(INCT_01_AMOUNT),TRAN_CODE)
local
PARALLEL 10 TABLESPACE IDXT;
ALTER
INDEX
IND_TRAN_CORRECTION_ABS_TRAN NOPARALLEL;
|
建立索引後跨30個分割槽查詢需要8秒鐘完成,IND_TRAN_CORRECTION_ABS_TRAN索引還是有點問題的,大家能看出來哪有問題嗎?
當查詢跨分割槽的時候,且where條件中包含分割槽欄位,我們只需要在非分割槽欄位建立本地索引(本地的組合索引),分割槽欄位會自行的進行分割槽裁剪;如果查詢不跨分割槽那麼就需要建立包含分割槽欄位的字首索引,這時候能過濾掉大量的不必要的資料,當然具體情況還要根據分割槽的大小、系統中一般的查詢條件、要求多長時間返回資料而定;當查詢條件中沒有分割槽欄位這時候就需要建立global索引。
| 作者簡介
姚崇·沃趣科技高階資料庫技術專家
熟悉Oracle資料庫內部機制,豐富的資料庫及RAC叢集層故障診斷、效能調優、OWI、資料庫備份恢復及遷移經驗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2212430/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- SQL最佳化案例-分割槽索引之無字首索引(六)SQL索引
- SQL優化思路&結果集重用優化、分割槽索引優化測試SQL優化索引
- 分割槽表索引實踐案例索引
- oracle 之全文索引表的分割槽交換案例Oracle索引
- mysql索引之字首索引MySql索引
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- 全域性分割槽索引和區域性分割槽索引索引
- 關於ORACLE MYSQL在非字首分割槽索引上分割槽剪裁的比較OracleMySql索引
- oracle索引詳解 分割槽索引Oracle索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- PostgreSQL11preview-索引優化。filter智慧消除、分割槽索引智慧合併SQLView索引優化Filter
- Oracle索引分割槽Oracle索引
- 字首索引,一種優化索引大小的解決方案索引優化
- SQL優化-索引SQL優化索引
- 分割槽表、分割槽索引和全域性索引部分總結索引
- 全面學習分割槽表及分割槽索引(17)--其它索引分割槽管理操作索引
- Oracle分割槽表及分割槽索引Oracle索引
- 本地索引、全域性索引、字首索引、非字首索引索引
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- SQL優化案例-自定義函式索引(五)SQL優化函式索引
- SQL優化案例-正確的使用索引(二)SQL優化索引
- MySQL SQL 優化之覆蓋索引MySql優化索引
- MySQL 分割槽建索引MySql索引
- oracle分割槽索引(二)Oracle索引
- oracle分割槽索引(一)Oracle索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 分割槽表及分割槽索引建立示例索引
- 分割槽索引和全域性索引(轉載)索引
- SQL優化之統計資訊和索引SQL優化索引
- 分割槽表分割槽索引查詢效率探究索引
- oracle 建立所有分割槽索引Oracle索引
- MSSQL優化之索引優化SQL優化索引
- [轉]Oracle分割槽索引--本地索引和全域性索引比較Oracle索引
- Oracle分割槽索引--本地索引和全域性索引比較(轉)Oracle索引
- 聊聊索引和SQL優化索引SQL優化
- SQL優化--函式索引SQL優化函式索引