1. 程式人生 > >索引型別和索引使用原則

索引型別和索引使用原則

使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構, 與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。
索引提供指向儲存在表的指定列中的資料值的指標,然後根據您指定的排序順序對這些指標排序。資料庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜尋索引以找到特定值,然後順指標找到包含該值的行。

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

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

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

a.唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
b.主鍵索引
資料庫表經常有一列或列組合,其值唯一標識表中的每一行,該列稱為表的主鍵
在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。

c.聚集索引
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。
如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。

鍵選擇原則:

1) 鍵設計4 原則

  • 為關聯欄位建立外來鍵。
  • 所有的鍵都必須唯一。
  • 避免使用複合鍵。
  • 外來鍵總是關聯唯一的鍵欄位。   

2) 使用系統生成的主鍵

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

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

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

4) 可選鍵有時可做主鍵

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

索引使用原則:

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

  1. 邏輯主鍵使用唯一的成組索引,對系統鍵(作為儲存過程)採用唯一的非成組索引,對任何外來鍵列採用非成組索引。考慮資料庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用作讀寫。
  2. 大多數資料庫都索引自動建立的主鍵欄位,但是可別忘了索引外來鍵,它們也是經常使用的鍵,比如執行查詢顯示主表和所有關聯表的某條記錄就用得上。
  3. 不要索引memo/note 欄位,不要索引大型欄位(有很多字元),這樣作會讓索引佔用太多的儲存空間。
  4. 不要索引常用的小型表

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

//----------------------------------------

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

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

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

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

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

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

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

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

以上是摘自網友文章,我本人覺得:索引的欄位的型別也需重點考慮,字元欄位索引就比數字欄位索引慢得多。