Oracle的索引主要包含兩類
BTree和位圖索引
默認情況下大多使用Btree索引
該索引就是通常所見 唯一索引
聚簇索引等等
Btree用在OLTP
加快查詢速度
位圖索引是Oracle的比較引人注目的地方
其主要用在OLAP(聯機數據分析)方面
也就是數據倉庫方面用到
目的是在加快查詢速度是
節省存儲空間
通常情況下
索引都要耗費比較大的存儲空間
位圖采用了壓縮技術實現磁盤空間縮減
Btree用在高基數(即列的數據相異度大)
位圖用在低基數列
位圖索引的基本原理是在索引中使用位圖而不是列值
通常在事實表和維表的鍵之間有很低的集的勢(cardinality)
使用位圖索引
存儲更為有效
與B*Tree索引比較起來
只需要更少的存儲空間
這樣每次讀取可以讀到更多的記錄
而且與B*Tree索引相比
位圖索引將比較
連接和聚集都變成了位算術運算
大大減少了運行時間
從而得到性能上的極大的提升
在Oracle中如何合理的使用位圖索引?以下的幾個事項應該考慮
* 如果要使用位圖索引
初始化參數STAR_TRANSFORMATION_ENABLED應該設置為TRUE
* 優化模式應該是CBO
對於數據倉庫的環境中
總是應該考慮使用CBO(COST
BASEDOPTIMIZER)
* 位圖索引應該建立在每一個事實表的外鍵列上
(這只是一個一般的規則
)
此外
對於數據表中的cardinality如何客觀的確定也是一個問題
一萬條數據中只包含
個值的集和算是低的了
那麼一億條記錄中包含
萬條記錄算不算低的呢?對於這樣的情況
建議幾行一下數據的模擬測試
一般來說
在數據倉庫環境中
位圖索引的性能要好於B*Tree索引
還要注意位圖索引不是為OLTP數據庫設計的
不應該在OLTP數據庫中大量的使用它
尤其是對那些有更新操作的表
Oracle的索引主要包含兩類
BTree和位圖索引
默認情況下大多使用Btree索引
該索引就是通常所見 唯一索引
聚簇索引等等
Btree用在OLTP
加快查詢速度
位圖索引是Oracle的比較引人注目的地方
其主要用在OLAP(聯機數據分析)方面
也就是數據倉庫方面用到
目的是在加快查詢速度是
節省存儲空間
通常情況下
索引都要耗費比較大的存儲空間
位圖采用了壓縮技術實現磁盤空間縮減
Btree用在高基數(即列的數據相異度大)
位圖用在低基數列
位圖索引的基本原理是在索引中使用位圖而不是列值
通常在事實表和維表的鍵之間有很低的集的勢(cardinality)
使用位圖索引
存儲更為有效
與B*Tree索引比較起來
只需要更少的存儲空間
這樣每次讀取可以讀到更多的記錄
而且與B*Tree索引相比
位圖索引將比較
連接和聚集都變成了位算術運算
大大減少了運行時間
從而得到性能上的極大的提升
在Oracle中如何合理的使用位圖索引?以下的幾個事項應該考慮
* 如果要使用位圖索引
初始化參數STAR_TRANSFORMATION_ENABLED應該設置為TRUE
* 優化模式應該是CBO
對於數據倉庫的環境中
總是應該考慮使用CBO(COST
BASEDOPTIMIZER)
* 位圖索引應該建立在每一個事實表的外鍵列上
(這只是一個一般的規則
)
此外
對於數據表中的cardinality如何客觀的確定也是一個問題
一萬條數據中只包含
個值的集和算是低的了
那麼一億條記錄中包含
萬條記錄算不算低的呢?對於這樣的情況
建議幾行一下數據的模擬測試
一般來說
在數據倉庫環境中
位圖索引的性能要好於B*Tree索引
還要注意位圖索引不是為OLTP數據庫設計的
不應該在OLTP數據庫中大量的使用它
尤其是對那些有更新操作的表
Oracle的索引主要包含兩類
BTree和位圖索引
默認情況下大多使用Btree索引
該索引就是通常所見 唯一索引
聚簇索引等等
Btree用在OLTP
加快查詢速度
位圖索引是Oracle的比較引人注目的地方
其主要用在OLAP(聯機數據分析)方面
也就是數據倉庫方面用到
目的是在加快查詢速度是
節省存儲空間
通常情況下
索引都要耗費比較大的存儲空間
位圖采用了壓縮技術實現磁盤空間縮減
Btree用在高基數(即列的數據相異度大)
位圖用在低基數列
位圖索引的基本原理是在索引中使用位圖而不是列值
通常在事實表和維表的鍵之間有很低的集的勢(cardinality)
使用位圖索引
存儲更為有效
與B*Tree索引比較起來
只需要更少的存儲空間
這樣每次讀取可以讀到更多的記錄
而且與B*Tree索引相比
位圖索引將比較
連接和聚集都變成了位算術運算
大大減少了運行時間
從而得到性能上的極大的提升
在Oracle中如何合理的使用位圖索引?以下的幾個事項應該考慮
* 如果要使用位圖索引
初始化參數STAR_TRANSFORMATION_ENABLED應該設置為TRUE
* 優化模式應該是CBO
對於數據倉庫的環境中
總是應該考慮使用CBO(COST
BASEDOPTIMIZER)
* 位圖索引應該建立在每一個事實表的外鍵列上
(這只是一個一般的規則
)
此外
對於數據表中的cardinality如何客觀的確定也是一個問題
一萬條數據中只包含
個值的集和算是低的了
那麼一億條記錄中包含
萬條記錄算不算低的呢?對於這樣的情況
建議幾行一下數據的模擬測試
一般來說
在數據倉庫環境中
位圖索引的性能要好於B*Tree索引
還要注意位圖索引不是為OLTP數據庫設計的
不應該在OLTP數據庫中大量的使用它
尤其是對那些有更新操作的表
Oracle的索引主要包含兩類
BTree和位圖索引
默認情況下大多使用Btree索引
該索引就是通常所見 唯一索引
聚簇索引等等
Btree用在OLTP
加快查詢速度
位圖索引是Oracle的比較引人注目的地方
其主要用在OLAP(聯機數據分析)方面
也就是數據倉庫方面用到
目的是在加快查詢速度是
節省存儲空間
通常情況下
索引都要耗費比較大的存儲空間
位圖采用了壓縮技術實現磁盤空間縮減
Btree用在高基數(即列的數據相異度大)
位圖用在低基數列
位圖索引的基本原理是在索引中使用位圖而不是列值
通常在事實表和維表的鍵之間有很低的集的勢(cardinality)
使用位圖索引
存儲更為有效
與B*Tree索引比較起來
只需要更少的存儲空間
這樣每次讀取可以讀到更多的記錄
而且與B*Tree索引相比
位圖索引將比較
連接和聚集都變成了位算術運算
大大減少了運行時間
從而得到性能上的極大的提升
在Oracle中如何合理的使用位圖索引?以下的幾個事項應該考慮
* 如果要使用位圖索引
初始化參數STAR_TRANSFORMATION_ENABLED應該設置為TRUE
* 優化模式應該是CBO
對於數據倉庫的環境中
總是應該考慮使用CBO(COST
BASEDOPTIMIZER)
* 位圖索引應該建立在每一個事實表的外鍵列上
(這只是一個一般的規則
)
此外
對於數據表中的cardinality如何客觀的確定也是一個問題
一萬條數據中只包含
個值的集和算是低的了
那麼一億條記錄中包含
萬條記錄算不算低的呢?對於這樣的情況
建議幾行一下數據的模擬測試
一般來說
在數據倉庫環境中
位圖索引的性能要好於B*Tree索引
還要注意位圖索引不是為OLTP數據庫設計的
不應該在OLTP數據庫中大量的使用它
尤其是對那些有更新操作的表
From:http://tw.wingwit.com/Article/program/Oracle/201311/18396.html