狠狠撸

狠狠撸Share a Scribd company logo
淺談開發中的效能調校
T-SQL篇
周妙謙
http://chousmiao.wordpress.com/
7/19/2013 T-SQL Enhancements in SQL Server 2012
Agenda
? 問題
? 目前作法
? 範例介紹
? 經驗分享
7/19/2013 | T-SQL Enhancements in SQL Server 20122 |
問題:網頁又跑不出來了
7/19/2013 | T-SQL Enhancements in SQL Server 20123 |
目前作法
7/19/2013 | T-SQL Enhancements in SQL Server 20124 |
? 錄Profiler
? 尋找出問題的Stored Procedure
? 開始針對該Stored Procedure去查詢哪一句語
句花了最久的時間
範例介紹-使用過多的資料表join
7/19/2013 | T-SQL Enhancements in SQL Server 2012
? 在一段陳述句中使用過多的join時,可以將其
拆成多段陳述句,先into到(#)Temp Table,同
時可以在Temp Table上建立適當的索引。這可
以避免過大的Working Table,並找出哪一段
join較慢
5 |
範例介紹-過度使用User Function
7/19/2013 | T-SQL Enhancements in SQL Server 20126 |
? 在SELECT欄位時使用函數,會讓每一筆資料再
去呼叫一次函數(如果符合記錄很多筆時,它還
滿可怕的)
? 函數盡量不要在Where陳述句的欄位上使用,在
Where條件式的欄位上使用函數時,該陳述句不
能適當的使用索引
7/19/2013 | T-SQL Enhancements in SQL Server 20127 |
經驗分享
7/19/2013 | T-SQL Enhancements in SQL Server 20128 |
使用子查詢或JOIN的時機?
? 子查詢:撰寫程式方便
? INNER JOIN
? 了解執行計畫的差異
使用OR運算子必須特別小心
? 「所有的」條件都有索引,才能提升查詢速度
? 只要有一個條件 (欄位) 沒有可用的索引,則
其他所有的條件都有索引也沒用,會造成整
Table Scan或Index Scan
7/19/2013 | T-SQL Enhancements in SQL Server 20129 |
其他
? DISTINCT、ORDER BY 語法會讓資料庫做額
外的計算
? UNION的使用,沒有剔除重複資料的需求,
使用 UNION ALL 會比 UNION 更佳
? 存取資料庫物件時,使用兩節式名稱。
? 遞迴資料可以考慮使用CTE語法撰寫,避免
Cursor
7/19/2013 | T-SQL Enhancements in SQL Server 201210 |
使用索引的搜尋條件
? 可以使用索引的搜尋條件
=
>
> =
<
< =
Between
Like ‘xx%’
? 無法使用索引的搜尋條件
<>
!=
!>
!<
OR
NOT IN
(可以考慮是否以Except 改寫,
觀察執行計畫是否改善效能)
NOT LIKE IN
NOT EXIST
LIKE ‘%xx’
7/19/2013 | T-SQL Enhancements in SQL Server 201211 |
結論
? 一定會發生,還會再發生,一直發生
? 改商業需求、實作邏輯、資料庫設計、交易鎖
定、索引、硬體
? 不要傳回大量資料、要有快取、包裝資料存取
物件以保證交易與錯誤處理
? Code Review、定期檢視索引的使用狀況,或
是否有系統建議索引
7/19/2013 | T-SQL Enhancements in SQL Server 201212 |
7/19/2013 | T-SQL Enhancements in SQL Server 201213 |

More Related Content

SQL PASS Taiwan 七月份聚會-3