Oracle 12c In-Memory Option - 7
13. storage index
習慣上,在一個表上查詢時全表掃描是最沒有效率的執行計劃,但是儲存在In-Memory Column Store
中的 tables 打破了這個老套的說法。
-- In-Memory Column Store 型別查詢:
SET TIMING ON
SELECT lo_orderkey, lo_custkey, lo_revenue
FROM lineorder
WHERE lo_orderkey = 5000000;
-- 在buffer cache中的查詢:
ALTER SESSION set inmemory_query = disable;
SELECT /* BUFFER CACHE */
lo_orderkey, lo_custkey, lo_revenue
FROM lineorder WHERE lo_orderkey = 5000000;
ALTER SESSION set inmemory_query = enable;
可以發現,In-Memory Column Store查詢明顯比buffer cache查詢快。
In-Memory Column Store在每個column上訪問storage index, storage index將column
值做 min/max pruning ,where子句謂詞對比相應列在每個 in-memory segment 中的
min/max 範圍,如果這個值沒有落在指定的範圍,那麼這個in-memory segment直接跳過,
不用再掃描 。
你能透過檢視三個IMC session statistics看出來min/max pruning的發生。
SELECT display_name, value
FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic# AND display_name IN
( 'IMC Preds all rows pass minmax',
'IMC Preds some rows pass minmax',
'IMC Preds no rows pass minmax' );
然後再次執行我們的查詢 :
SELECT lo_orderkey, lo_custkey, lo_revenue FROM lineorder WHERE lo_orderkey = 5000000;
再次檢查session statistics :
SELECT display_name, value
FROM v$mystat m, v$statname n
WHERE m.statistic# = n.statistic# AND display_name IN
( 'IMC Preds all rows pass minmax',
'IMC Preds some rows pass minmax',
'IMC Preds no rows pass minmax' );
從得出的結果可以看出min/max pruning的高效,statistics顯示大量的segments被跳過,因為
沒有行在這些segment 的min/max範圍 (no rows pass minmax),這意味著不會掃描這些segments,
我們的值僅僅落在少量segments上(some rows pass minmax)。
這時你可能會想,如果在where後的列上加一個簡單的索引,將可能會帶來和In-Memory column store
訪問一樣的效率。我們可以透過設定 OPTIMIZER_USE_INVISIBLE_INDEXES 引數(預設值為FALSE)來對比
In-Memory Column Store和使用index的效能 。例子:
create index lo_orderkey_idx on lineorder(lo_orderkey) invisible;
SET TIMING ON
SELECT lo_orderkey, lo_custkey, lo_revenue FROM lineorder WHERE lo_orderkey = 5000000;
ALTER SESSION set inmemory_query = disable;
ALTER SESSION SETOPTIMIZER_USE_INVISIBLE_INDEXES=TRUE;
--- 在buffer cache中使用index
SELECT lo_orderkey, lo_custkey, lo_revenue FROM lineorder WHERE lo_orderkey = 5000000;
ALTER SESSION set inmemory_query = enable;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-1081467/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c In-Memory Option - 10Oracle
- Oracle 12c In-Memory Option - 9Oracle
- Oracle 12c In-Memory Option - 8Oracle
- Oracle 12c In-Memory Option - 13Oracle
- Oracle 12c In-Memory Option - 6Oracle
- Oracle 12c In-Memory Option - 5Oracle
- Oracle 12c In-Memory Option - 4Oracle
- Oracle 12c In-Memory Option - 3Oracle
- Oracle 12c In-Memory Option - 2Oracle
- Oracle 12c In-Memory Option - 1Oracle
- Oracle 12c新特性:IN-Memory Option - 快取與引數Oracle快取
- Oracle 12C新特性In-MemoryOracle
- Oracle Database In-MemoryOracleDatabase
- 雲和恩墨獨家搶先測試In-Memory Option 特性!
- oracle with * option 理解Oracle
- 12C新特性___In-Memory列式儲存的總結
- Oracle Linux 7上安裝Oracle 12cOracleLinux
- Oracle Database In-Memory Certified with EBS 12.2OracleDatabase
- Oracle OCP(34):環境準備(Redhat 7 + Oracle 12c)OracleRedhat
- Oracle 12c Grid Infrastructure for a Standalone Server on Oracle Linux 7OracleASTStructServerLinux
- 12c in memory option學習筆記一_基礎篇筆記
- ORACLE WITH CHECK OPTION子句詳解Oracle
- 12c釋出正式版 12.1.0.2 (包括DB In-Memory正式版)
- 12c in memory option學習筆記二_資料訪問筆記
- Oracle檢視授權(with grant option)Oracle
- Oracle ASM新增磁碟組POWER OPTIONOracleASM
- Oracle Database 12c Release 2 (12.2) RAC On Oracle Linux 7 Using VMwareOracleDatabaseLinux
- Oracle 12cOracle
- Oracle 18c新特性詳解:In-Memory 專題Oracle
- oracle 12c Deprecation of Oracle StreamsOracle
- Oracle 12C GDSOracle
- Oracle 20c 的 In-Memory 新特性 Spatial 和 Text 支援Oracle
- 12c OCP題庫解析060-7 Oracle 12c 安全性與合規性的新特性Oracle
- 【12c Partitioning】Oracle 12c Partitioning特性Oracle
- Oracle 12C安裝Oracle
- Oracle 12c新特性Oracle
- Oracle 12c Relocate PDBOracle
- Oracle 12c Refreshable CloneOracle