Posted on 2009-01-22 09:10
非洲小白臉 閱讀(316)
評論(0) 編輯 收藏 所屬分類:
SQL Server
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、符合特定條件的計算列也可以創建索引。