優點:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,
作為通用規則,只有當經常查詢索引列中的資料時,才需要在表上建立索引。索引占用磁碟空間,並且降低新增、刪除和更新行的速度。在多數情況下,索引用於資料檢索的速度優勢大大超過它的。
缺點:建立太多的索引將會影響更新和插入的速度,因為它需要同樣更新每個索引檔案。對於乙個經常需要更新和插入的**,就沒有必要為乙個很少使用的where字句單獨建立索引了,對於比較小的表,排序的開銷不會很大,也沒有必要建立另外的索引。在某些情況下,建立索引的話也未必會快,例如索引放在乙個不連續的儲存空間時,這會增加讀磁碟的負擔,因此,哪個是最優,應該通過實際的使用環境來檢驗。
基礎知識:
為什麼索引會增加速度?通常資料庫的查詢方式是根據搜尋條件進行全表掃瞄,遇到匹配條件的就加入搜尋結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。大多數db廠商實現索引都是基於一種資料結構——b樹,這種結果能夠大大提高查詢速度。
根據資料庫的功能,可以在資料庫設計器中建立三種索引:唯一索引、主鍵索引和聚集索引。有關資料庫所支援的索引功能的詳細資訊,請參見資料庫文件。
提示:儘管唯一索引有助於定位資訊,但為獲得最佳效能結果,建議改用主鍵或唯一約束。
唯一索引唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有資料中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。
主鍵索引
資料庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。
在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速訪問。
聚集索引
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。
如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。
最普通的情況,是為出現在where子句的字段建乙個索引。為方便講述,先建立乙個如下的表。
createtablemytable(
idserialprimarykey,
category_idintnotnulldefault0,
user_idintnotnulldefault0,
adddateintnotnulldefault0
);
如果在查詢時常用類似以下的語句:
select * from mytable where category_id=1;
最直接的應對之道,是為category_id建立乙個簡單的索引:
create index mytable_categoryid on mytable (category_id);
ok.如果有不止乙個選擇條件呢?例如:
select * from mytable where category_id=1 and user_id=2;
第一反應可能是,再給user_id建立乙個索引。不好,這不是乙個最佳的方法。可以建立多重的索引。
create index mytable_categoryid_userid on mytable(category_id,user_id);
建立合適索引需要考慮的因素:
總的來說,索引建立之前需要結合實際應用和資料分布進行分析再分析,通常會考慮下面幾點
結合實際的應用。
考慮索引列的資料分布,如果distinct值很少且資料分布均勻的話,可能就不適合放在聯合索引的最前面。
考慮索引的大小,在字段長度32的列和長度為7的列上建立索引大小肯定是不一樣的,索引越大掃瞄的代價就越高。
考慮索引列冗餘,可能你在索引中多冗餘乙個小字段,select就只走索引而不需要去掃瞄原表的資料。
考慮索引對其他sql的影響,是否其他的sql也可以使用這個索引。
考慮對是否可以對原有索引進行合併,評估合併會有多大的影響。
資料庫使用索引的利弊
索引概念 索引是由使用者建立,能夠被修改和刪除的,實際儲存在資料庫中的物理存在,它是某乙個表中一列或者若干列值的集合和相應的指向表中物理標誌這些值的資料頁的邏輯指標清單。索引的優點 第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主...
資料庫 索引的使用
1.索引的含義和特點 1 索引是單獨的 儲存在磁碟上的資料結構 他們包含著對資料表裡所有記錄的引用指標。2 通過建立唯一索引,可以保證資料庫表中每一行資料的唯一性。3 可以大大的加快資料的查詢速度 4 加速表與表之間的聯絡 5 減少查詢中分組和排序的時間 6 建立索引的維護索引需要耗費時間 並且隨著...
資料庫索引的使用
多列索引1 多列索引2 mysql中的多列索引。1 聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當...