1. 程式人生 > >關於數據庫的索引知識

關於數據庫的索引知識

檢索 st表 mysql blank 一個 普通 排序 b數 gpo

索引概念的理解

索引是對數據庫表中一個或多個列(例如,employee 表的姓名 (name) 列)的值進行排序的結構。如果想按特定職員的姓來查找他或她,
則與在表中搜索所有的行相比,索引有助於更快地獲取信息,使用索引可快速訪問數據庫表中的特定信息。

例如這樣一個查詢:select * from table1 where id=10000。如果沒有索引,必須遍歷整個表,直到ID等於10000的這一行被找到為止;
有了索引之後(必須是在ID這一列上建立的索引),即可在索引中查找。由於索引是經過某種算法優化過的,因而查找次數要少的多。
可見,索引是用來定位的。

在關系數據庫中,索引是一種與表有關的數據庫結構,它可以使對應於表的SQL語句執行得更快。索引的作用相當於圖書的目錄,可以根據

目錄中的頁碼快速找到所需的內容。當表中有大量記錄時,若要對表進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,
和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量數據庫系統時間,並造成大量磁盤I/O操作;第二種就是在表中建
立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄

索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若幹列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。

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

在數據庫關系圖中,可以在選定表的“索引/鍵”屬性頁中創建、編輯或刪除每個索引類型。當保存索引所附加到的表,或保存該表所在的

關系圖時,索引將保存在數據庫中。

索引優點

1.大大加快數據的檢索速度;
2.創建唯一性索引,保證數據庫表中每一行數據的唯一性;
3.加速表和表之間的連接;
4.在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間。


索引缺點

1.索引需要占物理空間。
2.當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度。
在創建索引之前,您必須確定要使用哪些列以及要創建的索引類型。


普通索引

這是最基本的索引類型,而且它沒有唯一性之類的限制。唯一任務是加快對數據的訪問速度。

唯一索引

唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有數據中存在重復的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。數據庫還可能防止添加將在表中創建重復鍵值的新數據。
例如,如果在 employee 表中職員的姓 (lname) 上創建了唯一索引,則任何兩個員工都不能同姓。

主鍵索引

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

主鍵分為復合主鍵和聯合主鍵。

復合主鍵。
就是指你表的主鍵含有一個以上的字段組成 。
例如;
create table test
(
name varchar(19),
id number,
value varchar(10),
primary key (id,name)
)
上面的id和name字段組合起來就是你test表的復合主鍵 (若其一為單索引字段時,左邊的id才會有索引)
它的出現是因為你的name字段可能會出現重名,所以要加上ID字段這樣就可以保證你記錄的唯一性
一般情況下,主鍵的字段長度和字段數目要越少越好

聯合主鍵。

顧名思義就是多個主鍵聯合形成一個主鍵組合,體現在聯合。
(主鍵原則上是唯一的,別被唯一值所困擾。)
索引可以極大的提高數據的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執行這些寫操作時,還要操作索引文件。

簡單的例子
主鍵A跟主鍵B組成聯合主鍵
主鍵A跟主鍵B的數據可以完全相同(困擾吧,沒關系),聯合就在於主鍵A跟主鍵B形成的聯合主鍵是唯一的。
下例主鍵A數據是1,主鍵B數據也是1,聯合主鍵其實是11,這個11是唯一值,絕對不充許再出現11這個唯一值。(這就是多對多關系)
主鍵A數據 主鍵B數據
1      1
2      2
3      3
主鍵A與主鍵B的聯合主鍵值最多也就是
11 12 13
21 22 23
31 32 33

關於數據庫的索引知識