SQL效能調教中,調整T-SQL指令是最容易的方法,以下幾點為T-SQL注意項目
1.不要對資料欄位作運算
我們先將CreateID與name都有設定索引
下好兩種查詢產品名稱與建立者的作法
SELECT[id]
,[name]
FROM [Product]
WHERE [CreateID]='8888' AND [name]='雙端子四面倒角成型插針機'
相關數據:子樹成本0.0131,索引搜尋
以字串相加方式搜尋
SELECT
[id]
,[name]
FROM [Product]
WHERE [CreateID]+','+[name]='8888,雙端子四面倒角成型插針機'
相關數據:子樹成本0.0153,索引掃描
由上數據可知因為必須所有資料的欄位相加後才知道符不符合,所以無法直接使用索引,必須使用叢集索引掃描
2.少用負向查詢
盡量少用NOT.!=.<>.!<.>!之類的語法,這類與法條件是不要甚麼資料但是其他都要,所以這類語法無法非常有效的使用二分搜尋法
SELECT
[id]
,[name]
FROM [Product]
where [name]<>'八軸全自動繞線機'
3.盡量少在where使用函數
使用此類函數後SQL Server 需要將所有相關欄位分別傳入函式中,所效能一定不好,盡量少用
SELECT[name]
FROM [Product]
where convert(varchar(10),amount)='1500' AND convert(varchar(10),amount)='1000'
4.小心使用or
基本上取資料時當然是範圍越小越好,而or語法不是一個有效可縮小範圍的語法
5.JOIN語法
當需要使用Join語法,盡量先縮小範圍再Join,通常單純兩個資料表Join不太會影響效能,但是三以上的資料表Join,甚至還有更多複雜的運算,這是要特別注意,先縮小資料量在做Join
6.快速取得前幾筆
option(fast n)為快速取得暫存的前n比
SELECT[id]
,[name]
FROM [Product]
option(fast 1000)
7.分頁新語法
在SQL Server 2012有個新的分頁語法,使用方法如下
select ....from table
order by ...
OFFSET @startNum ROWS FETCH NEXT @n ROWS ONLY
@startNum:起始值
@n:一頁筆數
這是取得5筆後的前5筆資料的範例,也可以解讀成一頁5筆的第二頁資料
select * from Product
order by id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
基本上越新的語法效能通常會越好