資料庫索引

2021-08-22 02:15:07 字數 1473 閱讀 7136

資料庫索引

在oracle中,有很多理由需要使用索引,在乙個oltp系統中,有可能索引占用的空間會大於所在表占用的空間,對資料訪問速度的加快也能提高後續的反應速度。我們知道,oracle提供了很多態別的索引 :

1.b樹索引  這是最普通的索引,從oracle的早期版本就引入了。 

2.點陣圖索引(bitmap indexes) 位圖索引適用於一列只含有很少數量的不同的值,即low cardinality,這種索引對於唯讀資料庫來說非常快,但是對於經常要進行更新操作來說就不適用了。

3.點陣圖連線索引(bitmap join indexes)    這種索引是多列索引(multi-column index),建立在和其他表進行連線的基礎上。 這是唯一的建立這種索引的方法,它使用了和sql類似的from和where子句。

對sql server

索引可以加快資料檢索的速度,但它會使資料的select,insert,delete變慢,對於聚集索引,資料是按照邏輯順序存放在一定的物理位置,當變更資料時,根據新的資料順序,需要將許多資料進行物理位置的移動。對非聚集索引,資料更新時也需要更新索引頁,這也需要占用系統時間。因此在乙個表中使用太多的索引,會影響資料庫的效能。

在《資料庫原理》裡面,對聚簇索引的解釋是:聚簇索引的順序就是資料的物理儲存順序,而對非聚簇索引的解釋是:索引順序與資料物理排列順序無關。正式因為如此,所以乙個表最多只能有乙個聚簇索引。

索引的管理成本

1、  儲存索引的磁碟空間

2、  執行資料修改操作(insert、update、delete)產生的索引維護

3、  在資料處理時回需額外的回退空間。

對於索引的優化,從索引實現本身:

1.對於等職查詢使用雜湊結構的索引,對含非等值查詢的使用b樹。

2.壓縮索引鍵值,減少索引層數

對於使用者的選擇來說:

1.對於查詢乙個範圍的值,或者多個記錄的值時使用聚集索引,而對於經常查詢少數記錄的使用非聚集索引

2.對於插入,刪除,更新操作多的盡量不使用聚集索引,對於比較小的表結構最好不使用索引,因為索引帶來的負荷可能成為瓶頸。

3.一般聚集索引只有乙個,要將聚集索引建立在,用以縮小查詢範圍或需要排序的字段上

如何快速新建大資料量表的索引

如果乙個表的記錄達到100萬以上的話,要對其中乙個欄位建索引可能要花很長的時間,甚至導致伺服器資料庫宕機,因為在建索引的時候oracle要將索引字段所有的內容取出並進行全面排序,資料量大的話可能導致伺服器排序記憶體不足而引用磁碟交換空間進行,這將嚴重影響伺服器資料庫的工作。解決方法是增大資料庫啟動初始化中的排序記憶體引數,如果要進行大量的索引修改可以設定10m以上的排序記憶體(oracle預設大小為64k),在索引建立完成後應將引數修改回來,因為在實際oltp資料庫應用中一般不會用到這麼大的排序記憶體。

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...