建立clustered索引原則:
1、primary key,但必須滿足以下條件:a、常用於where條件,b、插入記錄時的字段值是隨機的(不能用於順序增加的字段,否則將增加最後乙個資料頁的lock等待時間)
2、用於範圍查詢的字段,如 col1 between 100 and 200; col12>;62 and <70;
3、用於order by的字段
4、不經常改變(update)的字段
5、用於連線條件的字段
其他有關建立索引的原則:
1、如果索引是唯一的,將其定義為unique
2、如果使用引用表索引(foreign key ... reference),被引用的列必須建立唯一索引
3、如果建立索引的表有頻繁的插入(insert)操作,使用fillfactor減少資料頁的**、提高併發效能並減少死鎖
4、如果在乙個唯讀表上建立索引,將其fillfactor設為100以盡可能壓縮資料和索引空間
5、盡可能減少單個索引的長度
6、在滿足使用的前提下,盡可能使用小容量的資料型別(如用numeric代替char)
7、數值(numeric)的比較在內部操作上比字元(string)略快
8、變長字串(varchar)和二進位制(binary)型別比定長(fixed-length)型別需要更多的系統負載
9、只要可能,使用定長(fixed-length)、非空(non-null)、短(short)的資料型別字段作為索引
10、連線條件兩端的索引必須是相容的(最好是同一型別),如果需要進行資料轉換的話,連線索引將不能發揮作用
建立復合字段索引的原則
1、當條件內不包含復合索引的第乙個欄位時,有兩種可能:a、當所有select的字段均包含在復合索引內時,做所有索引頁的遍歷查詢,b、當select中包含非復合索引欄位時,做全表資料頁的遍歷查詢,既此時索引對檢索無效。
2、復合索引優點:a、提供索引覆蓋(index covering)的機會,但僅限於所有查詢(select)欄位均包含在索引內,b、當查詢條件使用到復合索引的所有欄位時,所需要時間少於這些字段建立單獨索引的情況,c、復合索引有利於強制多個屬性合併後的唯一性限制
3、復合索引缺點:a、需要更多的索引空間,減少每個索引頁包含的索引記錄數,並增加索引頁數目,b、對復合索引中任何乙個欄位的變化(update或insert)都會更新索引,因此復合索引必須選擇不進行變化的字段組成
4、差的復合索引特點:a、復合索引長度接近於記錄長度,b、復合索引中只有少量字段用於查詢
sybase建立索引的原則
補充一點:
--建立非聚集索引
1.滿足查詢條件的資料不超過20%
2.能實現 index covering
3.用於集函式、連線、group by和order by的列
4.要權衡索引對查詢速度的加快與降低修改速度之間的利弊
--刪除影響效能的索引
如果乙個應用在白天執行資料修改,在夜間生成報表,
就需要在早晨刪除索引,在晚上再把索引重建起來。
另外許多系統設計者建立許多優化器很少使用的索引,
可以根據showplan,把沒有用的索引刪除。
聚簇索引(CLUSTERED)
ps 聚簇索引唯一,唯一索引每個值唯一 聚簇索引 clustered index 和非聚簇索引 non clustered index 最通俗的解釋是 聚簇索引的順序就是資料的物理儲存順序,而對非聚簇索引的索引順序與資料物理排列順序無關。舉例來說,你翻到新華字典的漢字 爬 那一頁就是p開頭的部分,這...
索引建立原則
1 表的主鍵 外來鍵必須有索引 2 資料量超過300的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引 7 ...
索引建立的原則
索引查詢是資料庫中重要的記錄查詢方法,要不要進入索引以及在那些欄位上建立索引都要和實際資料庫系統的查詢要求結合來考慮,下面給出實際中的一些通用的原則 1.在經常用作過濾器的字段上建立索引 2.在sql語句中經常進行group by order by的字段上建立索引 3.在不同值較少的字段上不必要建立...