sql pass taiwan 七月份聚會-3

13
淺淺淺淺淺淺淺淺淺淺 T-SQL 淺 淺淺淺 http://chousmiao.wordpress.com/ 06/12/2 022 T-SQL Enhancements in SQL Server 2012

Upload: sqlpasstw

Post on 28-Jun-2015

274 views

Category:

Technology


1 download

DESCRIPTION

周妙謙 - 淺談開發中的效能調校

TRANSCRIPT

Page 1: SQL PASS Taiwan 七月份聚會-3

04/13/2023

T-SQL Enhancements in SQL Server 2012

淺談開發中的效能調校T-SQL 篇

周妙謙http://chousmiao.wordpress.com/

Page 2: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

Agenda

問題 目前作法 範例介紹 經驗分享

04/13/2023 |

2 |

Page 3: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

問題:網頁又跑不出來了

04/13/2023 |

3 |

Page 4: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

目前作法

04/13/2023 |

4 |

錄 Profiler 尋找出問題的 Stored Procedure 開始針對該 Stored Procedure 去查詢哪一句

語句花了最久的時間

Page 5: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

範例介紹 - 使用過多的資料表 join

04/13/2023 |

在一段陳述句中使用過多的 join 時,可以將其拆成多段陳述句,先 into 到 (#)Temp Table ,同時可以在 Temp Table 上建立適當的索引。這可以避免過大的 Working Table ,並找出哪一段 join 較慢

5 |

Page 6: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

範例介紹 - 過度使用 User Function

04/13/2023 |

6 |

在 SELECT 欄位時使用函數,會讓每一筆資料再去呼叫一次函數 ( 如果符合記錄很多筆時,它還滿可怕的 )

函數盡量不要在 Where 陳述句的欄位上使用,在 Where 條件式的欄位上使用函數時,該陳述句不能適當的使用索引

Page 7: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 201204/13/2023 |

7 |

經驗分享

Page 8: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 201204/13/2023 |

8 |

使用子查詢或 JOIN 的時機 ?

子查詢 : 撰寫程式方便 INNER JOIN 了解執行計畫的差異

Page 9: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

使用 OR 運算子必須特別小心

「所有的」條件都有索引,才能提升查詢速度 只要有一個條件 ( 欄位 ) 沒有可用的索引,則

其他所有的條件都有索引也沒用,會造成整Table Scan 或 Index Scan

04/13/2023 |

9 |

Page 10: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

其他

DISTINCT 、 ORDER BY 語法會讓資料庫做額外的計算

UNION 的使用,沒有剔除重複資料的需求,使用 UNION ALL 會比 UNION 更佳

存取資料庫物件時,使用兩節式名稱。 遞迴資料可以考慮使用 CTE 語法撰寫,避免

Cursor

04/13/2023 |

10 |

Page 11: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

使用索引的搜尋條件

可以使用索引的搜尋條件=> > =< < =BetweenLike ‘xx%’

無法使用索引的搜尋條件<>!=!>!<ORNOT IN ( 可以考慮是否以 Except 改寫,觀察執行計畫是否改善效能 )

NOT LIKE INNOT EXISTLIKE ‘%xx’

04/13/2023 |

11 |

Page 12: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 2012

結論

一定會發生,還會再發生,一直發生 改商業需求、實作邏輯、資料庫設計、交易鎖

定、索引、硬體 不要傳回大量資料、要有快取、包裝資料存取

物件以保證交易與錯誤處理 Code Review 、定期檢視索引的使用狀況,或

是否有系統建議索引

04/13/2023 |

12 |

Page 13: SQL PASS Taiwan 七月份聚會-3

T-SQL Enhancements in SQL Server 201204/13/2023 |

13 |

謝 謝