索引型別和索引使用原則

2021-05-08 13:18:31 字數 1898 閱讀 6115

使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構, 與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。

索引提供指向儲存在表的指定列中的資料值的指標,然後根據您指定的排序順序對這些指標排序。資料庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜尋索引以找到特定值,然後順指標找到包含該值的行。

作為通用規則,只有當經常查詢索引列中的資料時,才需要在表上建立索引。索引占用磁碟空間,並且降低新增、刪除和更新行的速度。

如果經常同時搜尋兩列或多列或按兩列或多列排序時,索引也很有幫助。例如,如果經常在同一查詢中為姓和名兩列設定判據,那麼在這兩列上建立多列索引將很有意義。

索引型別

根據資料庫的功能,可以在資料庫設計器中建立三種索引:唯一索引、主鍵索引和聚集索引

a.唯一索引

唯一索引是不允許其中任何兩行具有相同索引值的索引。

b.主鍵索引

資料庫表經常有一列或列組合,其值唯一標識表中的每一行,該列稱為表的主鍵。

在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。

c.聚集索引

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。

如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。

鍵選擇原則:

1) 鍵設計4 原則

2) 使用系統生成的主鍵

設計資料庫的時候採用系統生成的鍵作為主鍵,那麼實際控制了資料庫的索引完整性。這樣,資料庫和非人工機制就有效地控制了對儲存資料中每一行的訪問。採用系統生成鍵作為主鍵還有乙個優點:當擁有一致的鍵結構時,找到邏輯缺陷很容易。

3) 不要用使用者的鍵(不讓主鍵具有可更新性)

在確定採用什麼字段作為表的鍵的時候,可一定要小心使用者將要編輯的字段。通常的情況下不要選擇使用者可編輯的字段作為鍵。

4) 可選鍵有時可做主鍵

把可選鍵進一步用做主鍵,可以擁有建立強大索引的能力。

索引使用原則:

索引是從資料庫中獲取資料的最高效方式之一。95%的資料庫效能問題都可以採用索引技術得到解決。

邏輯主鍵使用唯一的成組索引,對系統鍵(作為儲存過程)採用唯一的非成組索引,對任何外來鍵列採用非成組索引。考慮資料庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用作讀寫。

大多數資料庫都索引自動建立的主鍵字段,但是可別忘了索引外來鍵,它們也是經常使用的鍵,比如執行查詢顯示主表和所有關聯表的某條記錄就用得上。

不要索引memo/note 字段,不要索引大型字段(有很多字元),這樣作會讓索引占用太多的儲存空間。

不要索引常用的小型表

不要為小型資料表設定任何鍵,假如它們經常有插入和刪除操作就更別這樣作了。對這些插入和刪除操作的索引維護可能比掃瞄表空間消耗更多的時間。

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

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

2. 在sql語句中經常進行group by、order by的字段上建立索引;

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

4. 對於經常訪問的列避免建立索引;

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

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

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

索引的使用原則

在where子句或者連線條件經常引用的列上建立索引,特別是大表的字段,應該建立索引。經常出現在關鍵字group by order by distinct後面的字段,最好建立索引。表的主鍵 外來鍵必須建立索引。建立了主鍵和唯一性約束後會自動建立唯一索引。如果單字段查詢很少甚至沒有,那麼可以建立復合索引...

索引 查詢型別和索引

當您考慮是否要對列建立索引時,請估計在查詢中使用列的方式,下表介紹了索引對其有用的查詢型別.表中的示例基於 adventureworks2008r2 示例資料庫,在 sql server management studio 中執行這些示例時.您可以通過顯示實際的執行計畫來檢視查詢優化器選擇的索引.有...

Hibernate使用索引及索引新增原則

1 表上加索引 table name t s user indexes public class user 2 關聯表上加索引 試驗點 用於資料許可權控制 manytomany fetch fetchmode.subselect jointable name t s user triallocati...