SQL2005合理的索引設計

2021-05-23 07:24:23 字數 1153 閱讀 4368

合理的索引有助於提公升系統效能和可用程度,我工作中見過乙個設計錯誤的索引導致sqlserver將一台4cpu的伺服器資源用盡。 權威參考參見msdn

1、評估索引本身的占用空間,當索引相對於其資料本身過大可能會無明顯作用。這種情況體現在:表很小,索引列過多,索引碎片過多。當索引在select中不起作用時,你還必須在insert和update、delete這些操作中去維護這些不起作用的資料。

2、in語句不一定不能使用索引,where id in(1,2)和where id =1 or id=2是等效的,這裡的in和not in的效能是相同的。而不能使用索引的原因是巢狀查詢: where id in(select 1 union select 2).

3、解除巢狀查詢無法利用索引的辦法是用exists子查詢,select * from tb1 a where exists(select 1 from tb2 where id=a.id)。而exists和not exists的效能和tb1的資料量無關,他們的效能差別在於tb2中的資料量。

4、like子句可以利用索引,所以盡可能少用left,right和substring函式。

5、函式不能使用索引,比如convert(varchar(7),date,120)='2008-06',或者datediff函式、甚至和常量的加減乘除運算等,正確的做法是用比較符號或者盡可能把datediff之類的函式放到等號右邊。

6、不用擔心隱式轉換,它總是轉換等號右邊的。比如 where id='2' 和where id=2是等效的。[勘誤:此條結論錯誤!轉換發生在左邊導致索引失效]

7、聚集索引的查詢效能好於非聚集索引,但是維護代價很大,對於他的資料改變會引起整行資料的物理位置移動。同時聚集索引還要為非聚集索引提供索引服務,所以盡量不用過大的列或過多的列作聚集索引。

8、聚集索引可以極大優化大於,小於,group by和order by以及join語句的查詢效能。

9、一張表只能由乙個聚集索引。

10、唯一索引有助於查詢優化。

11、聯合索引的第一列可以單獨使用,其他的索引列在單獨的where子句中不起作用。

12、索引的公升序降序對order by子句的影響很大。

13、符合特定條件的計算列也可以建立索引。

SQL2005合理的索引設計

合理的索引有助於提公升系統效能和可用程度,我工作中見過乙個設計錯誤的索引導致sqlserver將一台4cpu的伺服器資源用盡。權威參考參見msdn 1 評估索引本身的占用空間,當索引相對於其資料本身過大可能會無明顯作用。這種情況體現在 表很小,索引列過多,索引碎片過多。當索引在select中不起作用...

SQL2005合理的索引設計

合理的索引有助於提公升系統效能和可用程度,我工作中見過乙個設計錯誤的索引導致sqlserver將一台4cpu的伺服器資源用盡。權威參考參見msdn 1 評估索引本身的占用空間,當索引相對於其資料本身過大可能會無明顯作用。這種情況體現在 表很小,索引列過多,索引碎片過多。當索引在select中不起作用...

SQL2005合理的索引設計

合理的索引有助於提公升系統效能和可用程度,我工作中見過乙個設計錯誤的索引導致sqlserver將一台4cpu的伺服器資源用盡。權威參考參見msdn 1 評估索引本身的占用空間,當索引相對於其資料本身過大可能會無明顯作用。這種情況體現在 表很小,索引列過多,索引碎片過多。當索引在select中不起作用...