mysql數據庫和oracle數據庫建立索引的原則

數據庫建立索引的原則 
1,確定針對該表的操作是大量的查詢操作還是大量的增刪改操作。 

2,嘗試建立索引來幫助特定的查詢。檢查自己的sql語句,爲那些頻繁在where子句中出現的字段建立索引。 

3,嘗試建立複合索引來進一步提高系統性能。修改複合索引將消耗更長時間,同時,複合索引也佔磁盤空間。 

4,對於小型的表,建立索引可能會影響性能 

5,應該避免對具有較少值的字段進行索引。 

6,避免選擇大型數據類型的列作爲索引。 

mysql索引建立的原則 

索引查詢是數據庫中重要的記錄查詢方法,要不要進入索引以及在那些字段上建立索引都要和實際數據庫系統的查詢要求結合來考慮,下面給出實際中的一些通用的原則: 

1. 在經常用作過濾器的字段上建立索引; 

2. 在SQL語句中經常進行GROUP BY、ORDER BY的字段上建立索引; 

3. 在不同值較少的字段上不必要建立索引,如性別字段; 

4. 對於經常存取的列避免建立索引; 

5. 用於聯接的列(主健/外健)上建立索引; 

6. 在經常存取的多個列上建立複合索引,但要注意複合索引的建立順序要按照使用的頻度來確定; 

7. 缺省情況下建立的是非簇集索引,但在以下情況下最好考慮簇集索引,如:含有有限數目(不是很少)唯一的列;進行大範圍的查詢;充分的利用索引可以減少表掃描I/0的次數,有效的避免對整表的搜索。當然合理的索引要建立在對各種查詢的分析和預測中,也取決於DBA的所設計的數據庫結構。 

oracle 索引建立的若干原則 

       我們首先要考慮的是數據量,數據量級別的不同,要考慮的問題有很大區別。幾千條記錄建不建索引其實都無所謂了,差個幾豪秒也感覺不出來,但數據量一旦要增長到百萬, 千萬級別,索引的重要性就體現出來了。沒有索引一個查詢可能要幾個小時甚至幾天才能出來,對數據庫的影響不僅僅是查詢速度的降低, 在io 上的花費和對數據庫連接資源的佔用甚至會拖跨數據庫。那麼怎樣建立索引,建立什麼類型的索引呢,應該按照幾個方面來考慮。 

1. 先要了解業務需求,總結出應用會按照哪幾個字段來進行查詢。例如一個人員查詢系統可能會按照(姓名,身份證件號碼,性別,住址,民族等),當然可能是幾個字段的組合查詢。 

2. 確定了第一步後要估計數據的分佈。相同值有多少,是不是均勻。如姓名字段就會有大量的重複情況;性別可能只有兩個值(1,2 分別代表男,女),民族會有56 個。 

3. 確定索引的類型。選擇性高的字段建立B- 樹索引最好,如果數據量太大,可考慮把索引分區,在併發情況下通常會表現很好。相當於把一棵很大的B樹拆開成了多棵小樹。只有幾個值的字段如性別並且數據分佈比較均勻,查詢的平均命中率要是非常高就不需要建立索引,否則可以建立位圖索引(但會影響併發)。 

oracle建立索引原則 

索引需要平衡query和DML的需要,常用於(子)查詢的表應建立索引; 
把索引建到不同的表空間中; 
用統一的extent大小: 
五個block的倍數或者tablespace指定的MINIMUM EXTENT的倍數; 
創建索引考慮用NOLOGGING參數,重建索引的時候也一樣; 
創建索引時INITRANS值應該比相應的table的值高一些; 
對常用SQL語句的where條件中的列建立唯一索引或組合索引,組合條件查詢中相應的組合索引更有效; 
對於組合索引,根據列的唯一值概率,安排索引順序; 
如果一個列具有很低的數據基數,並且或者可具有空值,不應作爲索引列; 
如果where語句中不得不對查詢列採用函數查詢,如upper函數,最好建立相應函數索引; 
對於低基數集的列,幷包含OR等邏輯運算,考慮用Bitmap索引,對於從大量行的表中返回大量的行時也可以考慮Bitmap索引; 
避免在有大量併發DML運算的表中使用Bitmap索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章