建立索引的规则
建立索引常用的規(guī)則如下:
1、表的主鍵、外鍵必須有索引;
2、數(shù)據(jù)量超過300的表應(yīng)該有索引;
3、經(jīng)常與其他表進行連接的表,在連接字段上應(yīng)該建立索引;
4、經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;
5、索引應(yīng)該建在選擇性高的字段上;
6、索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;
7、復(fù)合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
A、正確選擇復(fù)合索引中的主列字段,一般是選擇性較好的字段;
B、復(fù)合索引的幾個字段是否經(jīng)常同時以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復(fù)合索引;否則考慮單字段索引;
C、如果復(fù)合索引中包含的字段經(jīng)常單獨出現(xiàn)在Where子句中,則分解為多個單字段索引;
D、如果復(fù)合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復(fù)合的字段;
E、如果既有單字段索引,又有這幾個字段上的復(fù)合索引,一般可以刪除復(fù)合索引;
8、頻繁進行數(shù)據(jù)操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執(zhí)行計劃造成負(fù)面影響;
以上是一些普遍的建立索引時的判斷依據(jù)。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應(yīng)該經(jīng)過仔細分析,要有建立的依據(jù)。因為太多的索引與不充 分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復(fù)合索引, 在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數(shù)據(jù)增加刪除時的性能,特別是對頻繁更新的表來說,負(fù)面影響更大。
數(shù)據(jù)庫創(chuàng)建索引的原則
索引可以提高數(shù)據(jù)的訪問速度,但同時也增加了插入、更新和刪除操作的處理時間。所以是否要為表增加索引、索引建立在那些字段上,是創(chuàng)建索引前必須要考慮的問題。解決此問題就是分析應(yīng)用程序的業(yè)務(wù)處理、數(shù)據(jù)使用,為經(jīng)常被用作查詢條件、或者被要求排序的字段建立索引。
索引是建立在數(shù)據(jù)庫表中的某些列的上面。因此,在創(chuàng)建索引的時候,應(yīng)該仔細考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。
www.2cto.com
一般選擇在這樣的列上創(chuàng)建索引:
1. 在經(jīng)常需要搜索查詢的列上創(chuàng)建索引,可以加快搜索的速度;
2. 在作為主鍵的列上創(chuàng)建索引,強制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);
3. 在經(jīng)常用在連接的列上創(chuàng)建索引,這些列主要是一些外鍵,可以加快連接的速度;
4. 在經(jīng)常需要根據(jù)范圍進行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的;
5. 在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢 時間;
6. 在經(jīng)常使用在Where子句中的列上面創(chuàng)建索引,加快條件的判斷速度;
7. 為經(jīng)常出現(xiàn)在關(guān)鍵字order by、group by、distinct后面的字段,建立索引。
一般不選擇具有這些特點的列上創(chuàng)建索引:
1. 對于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,并不能提高查 詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護速度和增大了空間需求;
2. 不要在有大量相同取值的字段上,建立索引。這是因為,由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加 快檢索速度;
3. 對于那些定義為text, image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因為,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少;
4. 當(dāng)修改性能遠遠大于檢索性能時,不應(yīng)該創(chuàng)建索引。這是因為,修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時,會提高檢索性能,但是會降低修改性能。當(dāng)減少索引時,會提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠遠大于檢索性能時,不應(yīng)該創(chuàng)建索引。
創(chuàng)建索引需要注意的地方:
www.2cto.com
1. 限制表上的索引數(shù)目。對一個存在大量更新操作的表,所建索引的數(shù)目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數(shù)據(jù)的更新操作。
2.
避免在取值朝一個方向增長的字段(例如:日期類型的字段)上,建立索引;對復(fù)合索引,避免將這種類型的字段放置在最前面。由于字段的取值總是朝一個方向
增長,新記錄總是存放在索引的最后一個葉頁中,從而不斷地引起該葉頁的訪問競爭、新葉頁的分配、中間分支頁的拆分。此外,如果所建索引是聚集索引,表中數(shù)
據(jù)按照索引的排列順序存放,所有的插入操作都集中在最后一個數(shù)據(jù)頁上進行,從而引起插入“熱點”。
3.
對復(fù)合索引,按照字段在查詢條件中出現(xiàn)的頻度建立索引。在復(fù)合索引中,記錄首先按照第一個字段排序。對于在第一個字段上取值相同的記錄,系統(tǒng)再按照第二
個字段的取值排序,以此類推。因此只有復(fù)合索引的第一個字段出現(xiàn)在查詢條件中,該索引才可能被使用。因此將應(yīng)用頻度高的字段,放置在復(fù)合索引的前面,會使
系統(tǒng)最大可能地使用此索引,發(fā)揮索引的作用。
4. 刪除不再使用,或者很少被使用的索引。表中的數(shù)據(jù)被大量更新,或者數(shù)據(jù)的使用方式被改變后,原有的一些索引可能不再被需要。數(shù)據(jù)庫管理員應(yīng)當(dāng)定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。
總結(jié)
- 上一篇: 教你搭建一个花卉识别系统(超级简单)
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?