關於Oracle 9i 跳躍式索引掃描(Index Skip Scan)的小測試 (轉)
在9i中我們知道能夠使用跳躍式掃描(Index SkScan).然而,能利用跳躍式索引掃描的情況其實是有些限制的.
從Oracle的文件中我們可以找到這樣的話:
Index Skip Scans
Index skip scans improve index scans by nonprefix columns.
Often, scanning index blocks is faster than scanning table data blocks.
Skip scanning lets a composite index be split logically into smaller subindexes.
In skip scanning, the initial column of the composite index is not specified in the query.
In other s, it is skipped.
The number of logical subindexes is detened by the number of distinct values in the initial column.
Skip scanning is advantageous if there are few distinct values in the leading column of the composite
index and many distinct values in the nonleading key of the index.
也可以這樣說,器根據索引中的前導列(索引到的第一列)的唯一值的數量決定是否使用Skip Scan.
我們首先做個測試:
> CREATE TABLE test AS
2 ROWNUM a,ROWNUM-1 b ,ROWNUM-2 c,ROWNUM-3 d,ROWNUM-4 e
3 FROM all_s
4 /
SQL> SELECT DISTINCT COUNT (a) FROM test;
COUNT(A)
----------
28251
表已建立。
SQL>
SQL> CREATE INDEX test_idx ON test(a,b,c)
2 /
索引已建立。
SQL> ANALYZE TABLE test COMPUTE STATISTICS
2 FOR TABLE
3 FOR ALL INDEXES
4 FOR ALL INDEXED COLUMNS
5 /
表已分析。
SQL> SET autotrace traceonly explain
SQL> SELECT * FROM test WHERE b = 99
2 /
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=36 Card=1 Bytes=26)
1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=36 Card=1 Bytes=26)
--可見這裡CBO選擇了全表掃描.
--我們接著做另一個測試:
SQL> drop table test;
表已丟棄。
SQL> CREATE TABLE test
2 AS
3 SELECT DECODE(MOD(ROWNUM,2), 0, '1', '2' ) a,
4 ROWNUM-1 b,
5 ROWNUM-2 c,
6 ROWNUM-3 d,
7 ROWNUM-4 e
8 FROM all_objects
9 /
表已建立。
SQL> set autotrace off
SQL> select distinct a from test;
A
--
1
2
--A列只有兩個唯一值
SQL> CREATE INDEX test_idx ON test(a,b,c)
2 /
索引已建立。
SQL> ANALYZE TABLE test COMPUTE STATISTICS
2 FOR TABLE
3 FOR ALL INDEXES
4 FOR ALL INDEXED COLUMNS
5 /
表已分析。
SQL> set autotrace traceonly explain
SQL> SELECT * FROM test WHERE b = 99
2 /
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=1 Bytes=24)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=4 Card=1 Bytes=24)
2 1 INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE) (Cost=3 Card=1)
Oracle的最佳化器(這裡指的是CBO)能對查詢應用Index Skip Scans至少要有幾個條件:
1 最佳化器認為是合適的.
2 索引中的前導列的唯一值的數量能滿足一定的條件.
3 最佳化器要知道前導列的值分佈(透過分析/統計表得到)
4 合適的SQL語句
......
更多資訊請參考:
.NET/showthread.?threadid=85948">http://www.itpub.net/showthread.php?threadid=85948
http://www.itpub.net/showthread.php?s=&postid=985602#post985602
OracleDatabase Performance Tuning Gu and Reference Release 2 (9.2)
Part Number A96533-02
感謝參加討論的各位高手.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962458/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 跳躍式索引掃描(index skip scan) [final]索引Index
- 跳躍式索引(Skip Scan Index)淺析 - 轉索引Index
- 跳躍式索引(Skip Scan Index)的淺析索引Index
- 【INDEX_SS】使用HINT使SQL用索引跳躍掃描(Index Skip Scan)方式快速獲取資料IndexSQL索引
- (轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- 轉)索引掃描還是全表掃描(Index Scan Or Full Table Scan)索引Index
- Oracle優化-索引原理[注意索引跳躍式掃描!Oracle優化索引
- 關於INDEX SKIP SCANIndex
- 索引優化index skip scan索引優化Index
- 索引唯一性掃描(INDEX UNIQUE SCAN)索引Index
- Index的掃描方式:index full scan/index fast full scanIndexAST
- [轉貼]Skip Scan IndexIndex
- INDEX SKIP SCANIndex
- MYSQL 中的GROUP BY 的方式 (1)(loose index scan鬆散掃描 tight index scan緊湊掃描)MySqlIndex
- 理解index skip scanIndex
- oracle hint_skip scan_index_ssOracleIndex
- index range scan,index fast full scan,index skip scan發生的條件IndexAST
- 【Oracle】 索引的掃描方式Oracle索引
- stopkey對索引掃描的影響測試TopK索引
- MySQL8.0之跳躍範圍掃描MySql
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- INDEX SKIP SCAN適用場景Index
- 【oracle】index的幾種掃描方式OracleIndex
- 使用索引快速全掃描(Index FFS)避免全表掃描的若干場景索引Index
- 解讀Oracle 索引掃描Oracle索引
- 高效的SQL(index skip scan使用條件)SQLIndex
- index skip scan的一些實驗。Index
- 【TUNE_ORACLE】列出走了INDEX SKIP SCAN的SQL參考OracleIndexSQL
- mysql下建立索引讓其index全掃描MySql索引Index
- oracle 全表掃描,索引範圍掃描與塊的理解Oracle索引
- 索引全掃描和索引快速全掃描的區別索引
- 關於函式索引(function-based index)函式索引FunctionIndex
- 關於Oracle 9i RAC enqueue等待的一點測試OracleENQ
- [總結]關於index range scans & INDEX (FAST FULL SCAN)IndexAST
- MySQL中的全表掃描和索引樹掃描MySql索引
- 【每日一摩斯】-Index Skip Scan Feature (212391.1)Index
- 關於索引掃描的極速調優實戰(第二篇)索引
- 測試建立基於函式的索引函式索引