【INDEX_SS】使用HINT使SQL用索引跳躍掃描(Index Skip Scan)方式快速獲取資料
索引跳躍掃描(Index Skip Scan)可以使用到複合索引的非字首索引列,達到改善效能的作用,前提是全表掃面的代價高於索引跳躍式掃描的代價。這裡給出使用HINT方法使SQL走索引跳躍掃描的方法。
1.初始化環境
1)建立表T
sec@ora10g> create table t(x number,y number);
Table created.
2)初始化1000條資料
sec@ora10g> insert into t select rownum,66 from dual connect by rownum<=1000;
1000 rows created.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select * from t ;
X Y
---------- ----------
1 66
2 66
3 66
……省略部分輸出……
998 66
999 66
1000 66
1000 rows selected.
3)在表T上建立複合索引
sec@ora10g> create index t_i on t(x,y);
Index created.
4)對錶進行分析
sec@ora10g> analyze table t compute statistics;
Table analyzed.
2.使用HINT方法使SQL走索引跳躍掃描
sec@ora10g> explain plan for select /*+ index_ss(t t_i) */ * from t where y=66;
Explained.
sec@ora10g> @?/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
Plan hash value: 597150364
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 5000 | 1002 (1)| 00:00:13 |
|* 1 | INDEX SKIP SCAN | T_I | 1000 | 5000 | 1002 (1)| 00:00:13 |
-------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("Y"=66)
filter("Y"=66)
14 rows selected.
3.不使用HINT檢視SQL語句的執行計劃
sec@ora10g> explain plan for select * from t where y=66;
Explained.
sec@ora10g> @?/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3046511974
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 5000 | 2 (0)| 00:00:01 |
|* 1 | INDEX FAST FULL SCAN| T_I | 1000 | 5000 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("Y"=66)
13 rows selected.
此時SQL使用的是INDEX FAST FULL SCAN方式來獲得的資料。
4.小結
瞭解並構造每一種SQL語句的執行計劃有助於我們深入瞭解SQL語句的執行方法,進而選擇最有效的方法檢索和處理資料。
Good luck.
secooler
11.09.13
-- The End --
1.初始化環境
1)建立表T
sec@ora10g> create table t(x number,y number);
Table created.
2)初始化1000條資料
sec@ora10g> insert into t select rownum,66 from dual connect by rownum<=1000;
1000 rows created.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select * from t ;
X Y
---------- ----------
1 66
2 66
3 66
……省略部分輸出……
998 66
999 66
1000 66
1000 rows selected.
3)在表T上建立複合索引
sec@ora10g> create index t_i on t(x,y);
Index created.
4)對錶進行分析
sec@ora10g> analyze table t compute statistics;
Table analyzed.
2.使用HINT方法使SQL走索引跳躍掃描
sec@ora10g> explain plan for select /*+ index_ss(t t_i) */ * from t where y=66;
Explained.
sec@ora10g> @?/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
Plan hash value: 597150364
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 5000 | 1002 (1)| 00:00:13 |
|* 1 | INDEX SKIP SCAN | T_I | 1000 | 5000 | 1002 (1)| 00:00:13 |
-------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("Y"=66)
filter("Y"=66)
14 rows selected.
3.不使用HINT檢視SQL語句的執行計劃
sec@ora10g> explain plan for select * from t where y=66;
Explained.
sec@ora10g> @?/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3046511974
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 5000 | 2 (0)| 00:00:01 |
|* 1 | INDEX FAST FULL SCAN| T_I | 1000 | 5000 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("Y"=66)
13 rows selected.
此時SQL使用的是INDEX FAST FULL SCAN方式來獲得的資料。
4.小結
瞭解並構造每一種SQL語句的執行計劃有助於我們深入瞭解SQL語句的執行方法,進而選擇最有效的方法檢索和處理資料。
Good luck.
secooler
11.09.13
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-707424/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跳躍式索引掃描(index skip scan) [final]索引Index
- 【SQL 提示 之二】index_ss Index Skip HintSQLIndex
- 跳躍式索引(Skip Scan Index)的淺析索引Index
- 跳躍式索引(Skip Scan Index)淺析 - 轉索引Index
- 關於Oracle 9i 跳躍式索引掃描(Index Skip Scan)的小測試 (轉)Oracle索引Index
- Index的掃描方式:index full scan/index fast full scanIndexAST
- (轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- 轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- oracle hint_skip scan_index_ssOracleIndex
- 索引優化index skip scan索引優化Index
- 索引唯一性掃描(INDEX UNIQUE SCAN)索引Index
- MYSQL 中的GROUP BY 的方式 (1)(loose index scan鬆散掃描 tight index scan緊湊掃描)MySqlIndex
- Oracle優化-索引原理[注意索引跳躍式掃描!Oracle優化索引
- 高效的SQL(index skip scan使用條件)SQLIndex
- 使用索引快速全掃描(Index FFS)避免全表掃描的若干場景索引Index
- INDEX SKIP SCANIndex
- 【HINT】使用“NO_INDEX ”Hint提示避免SQL使用特定索引IndexSQL索引
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- 理解index skip scanIndex
- INDEX SKIP SCAN適用場景Index
- [轉貼]Skip Scan IndexIndex
- 關於INDEX SKIP SCANIndex
- index range scan,index fast full scan,index skip scan發生的條件IndexAST
- 索引全掃描和索引快速全掃描的區別索引
- 【Oracle】 索引的掃描方式Oracle索引
- 【oracle】index的幾種掃描方式OracleIndex
- MySQL8.0之跳躍範圍掃描MySql
- mysql下建立索引讓其index全掃描MySql索引Index
- 【TUNE_ORACLE】列出走了INDEX SKIP SCAN的SQL參考OracleIndexSQL
- index skip scan的一些實驗。Index
- 執行計劃-資料訪問方式(全表掃描與4種索引的方式)索引
- 【oracle 效能優化】組合索引之index_ssOracle優化索引Index
- SQL Server 2005資料頁讀取--高階掃描SQLServer
- 索引反向使用案例,加index_desc hint索引Index
- 分析索引快速獲取索引資訊索引
- 使用索引掃描來進行排序索引排序
- 三張圖快速掃描中國最新GDP資料
- AppBoxFuture: 二級索引及索引掃描查詢資料APP索引