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