【索引】Oracle查詢指定索引提高查詢效率
一個1600萬資料表--簡訊上行表TBL_SMS_MO
結構:
CREATE TABLE TBL_SMS_MO
(
SMS_ID NUMBER,
MO_ID VARCHAR2(50),
MOBILE VARCHAR2(11),
SPNUMBER VARCHAR2(20),
MESSAGE VARCHAR2(150),
TRADE_CODE VARCHAR2(20),
LINK_ID VARCHAR2(50),
GATEWAY_ID NUMBER,
GATEWAY_PORT NUMBER,
MO_TIME DATE DEFAULT SYSDATE
);
結構:
CREATE TABLE TBL_SMS_MO
(
SMS_ID NUMBER,
MO_ID VARCHAR2(50),
MOBILE VARCHAR2(11),
SPNUMBER VARCHAR2(20),
MESSAGE VARCHAR2(150),
TRADE_CODE VARCHAR2(20),
LINK_ID VARCHAR2(50),
GATEWAY_ID NUMBER,
GATEWAY_PORT NUMBER,
MO_TIME DATE DEFAULT SYSDATE
);
CREATE INDEX IDX_MO_DATE ON TBL_SMS_MO (MO_TIME)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE
(
INITIAL 1M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
);
CREATE INDEX IDX_MO_MOBILE ON TBL_SMS_MO (MOBILE)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE
(
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
);
問題:從表中查詢某時間段內某手機傳送的短訊息,如下SQL語句: SELECT MOBILE,MESSAGE,TRADE_CODE,MO_TIME
FROM TBL_SMS_MO
WHERE MOBILE=130XXXXXXXX
AND MO_TIME BETWEEN TO_DATE(2006-04-01,YYYY-MM-DD HH24:MI:SS) AND TO_DATE(2006-04-07,YYYY-MM-DD HH24:MI:SS) ORDER BY MO_TIME DESC 返回結果大約需要10分鐘,應用於網頁查詢,簡直難以忍受。 分析: 在PL/SQL Developer,點選“EXPlain Plan”按鈕(或F5鍵),對SQL進行分析,發現預設使用的索引是IDX_MO_DATE。問題可能出在這裡,因為相對於總數量1600萬資料來說,都mobile的資料是很少的,假如使用IDX_MO_MOBILE比較輕易鎖定資料。 如下最佳化: SELECT /*+ index(TBL_SMS_MO IDX_MO_MOBILE) */ MOBILE,MESSAGE,TRADE_CODE,MO_TIME
FROM TBL_SMS_MO
WHERE MOBILE=130XXXXXXXX
AND MO_TIME BETWEEN TO_DATE(2006-04-01,YYYY-MM-DD HH24:MI:SS) AND TO_DATE(2006-04-07,YYYY-MM-DD HH24:MI:SS) ORDER BY MO_TIME DESC 測試: 按F8執行這個SQL,哇~... ... 2.360s,這就是差別。
FROM TBL_SMS_MO
WHERE MOBILE=130XXXXXXXX
AND MO_TIME BETWEEN TO_DATE(2006-04-01,YYYY-MM-DD HH24:MI:SS) AND TO_DATE(2006-04-07,YYYY-MM-DD HH24:MI:SS) ORDER BY MO_TIME DESC 返回結果大約需要10分鐘,應用於網頁查詢,簡直難以忍受。 分析: 在PL/SQL Developer,點選“EXPlain Plan”按鈕(或F5鍵),對SQL進行分析,發現預設使用的索引是IDX_MO_DATE。問題可能出在這裡,因為相對於總數量1600萬資料來說,都mobile的資料是很少的,假如使用IDX_MO_MOBILE比較輕易鎖定資料。 如下最佳化: SELECT /*+ index(TBL_SMS_MO IDX_MO_MOBILE) */ MOBILE,MESSAGE,TRADE_CODE,MO_TIME
FROM TBL_SMS_MO
WHERE MOBILE=130XXXXXXXX
AND MO_TIME BETWEEN TO_DATE(2006-04-01,YYYY-MM-DD HH24:MI:SS) AND TO_DATE(2006-04-07,YYYY-MM-DD HH24:MI:SS) ORDER BY MO_TIME DESC 測試: 按F8執行這個SQL,哇~... ... 2.360s,這就是差別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26892340/viewspace-722174/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談MYSQL索引是如何提高查詢效率的MySql索引
- Oracle提高查詢效率的方法Oracle
- MySQL索引憑什麼能讓查詢效率提高這麼多?MySql索引
- 使用Bulk Collect提高Oracle查詢效率Oracle
- 【索引】oracle查詢使用索引和不使用索引的比較索引Oracle
- 分割槽表分割槽索引查詢效率探究索引
- elasticsearch之多索引查詢Elasticsearch索引
- Elasticsearch(三):索引查詢Elasticsearch索引
- 查詢索引 常用SQL索引SQL
- 查詢相似的索引索引
- 【索引】反向索引--條件 範圍查詢索引
- MongoDB慢查詢與索引MongoDB索引
- 字母索引查詢ListView元件索引View元件
- mysql查詢索引結構MySql索引
- 反向索引與模糊查詢索引
- 【oracle 效能優化】組合索引查詢。Oracle優化索引
- 【Oracle】如何查詢檢視時使用索引Oracle索引
- NULL列時,如何使得IS NULL或者IS NOT NULL可以使用索引來提高查詢效率Null索引
- 阿里面試:MySQL索引憑什麼能讓查詢效率提高這麼多?阿里面試MySql索引
- laravel eloquent 判斷索引是否存在並強制指定索引進行查詢Laravel索引
- 【索引】反向索引--條件 範圍查詢(二)索引
- oracle全文索引之如何實現查詢Oracle索引
- MySQL索引與查詢優化MySql索引優化
- (利用索引)大資料查詢索引大資料
- 根據表查詢索引資訊索引
- cassandra的索引查詢和排序索引排序
- 全文索引和查詢概念索引
- 表和索引並行查詢索引並行
- IndexPatternService 模糊查詢索引 fuzzyQuery分析Index索引
- 理解索引(中):MySQL查詢過程和高階查詢索引MySql
- 索引監控-查詢從未被使用過的索引索引
- oracle查詢表資訊(索引,外來鍵,列等)Oracle索引
- 組合索引的前導列與查詢——ORACLE索引Oracle
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- indexedDB 通過索引查詢資料Index索引
- mongodb索引及查詢優化分析MongoDB索引優化
- 走索引掃描的慢查詢索引
- 查詢某個表的索引資訊索引