23
Grant Fritchey | www.ScaryDBA.com www.ScaryDBA.com Top Tips for Better T - SQL Stored Procedures Grant Fritchey – Red Gate Software

Top Tips for Better T-SQL

Embed Size (px)

Citation preview

Page 1: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

www.ScaryDBA.com

Top Tips for Better T-SQL Stored Procedures

Grant Fritchey – Red Gate Software

Page 2: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Goal

Learn methods for writing T-SQL for readability

Understand how to write T-SQL for performance

2

Page 3: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Get in touch

scarydba.com

[email protected]

@gfritchey

Grant Fritchey

Page 4: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Agenda Writing for readability

» Object Names & Format» Comments» Error Handling» Personal Preferences

Writing for performance» Data Types» Functions in Comparisons» Improper Use of Functions» The “Run Faster” Switch» Inappropriate Use of Query Hints» Recompiles» Row by Agonizing Row» Nesting Views

4

Page 5: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Writing for Readability

Define a local standard

» Object names

» Comments

» Format

» Error handling

Enforce the standard

» Document it

» Code reviews

5

Page 6: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Object Names & Format

Names should be descriptive

» Procedures should be a phrase

» Abbreviations should be common (no Ddltbl)

Use aliases

» Clear

» Common

Be consistent

» A foolish consistency is the hobgoblin of little minds

» Keyword in that sentence is “foolish”

6

Page 7: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Comments

Do something

Most important is describing the action, not documentation

Use source control for documentation

Self-documenting code is a lie

7

Page 8: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Error Handling

TRY/CATCH

Deadlocks

Establish local best practices

8

Page 9: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Personal Preferences CamelCase

Uppercase for reserve words and key words

Line breaks» On SELECT list» Between JOIN criteria» Between WHERE criteria

Use the semicolon

Indent » After initial SELECT» With ON clause» After WHERE clause

9

Page 10: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Writing For Performance Write for your data structures Write for your indexes Write for the query optimizer Avoid common issues:

» Data types» Functions in comparisons» Improper use of functions» The “run faster” switch» Inappropriate Query Hints» Recompiles» Null Values» Row By Agonizing Row» Nested Views

10

Page 11: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Data Types

Problem

» Implicit or explicit data type conversion

Indications

» Scans

» Slow performance

Solution

» Use appropriate data types

11

Page 12: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Functions in Comparisons

Problem

» Function on column in WHERE or JOIN criteria

Indications

» Scans

» Slow performance

Solution

» Don’t run functions on columns

» Use sargeable functions

12

Page 13: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Improper Use of Functions

Problem

» Multi-statement user defined functions cause poor performance

Indications

» Zero cost scan operator in exec plan

» Very slow performance

Solution

» When working with more than a few (~50?) rows, don’t use them

» When using operations such as JOIN that require statistics, don’t use them

13

Page 14: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

The “Run Faster” Switch Problem

» Use of the NO_LOCK query hint everywhere, or setting transaction isolation level to READ_UNCOMMITTED

Indications» Extra rows in result set» Missing rows in result set

Solution» Tune the queries» Tune the structures» Use snapshot isolation levels

http://www.jasonstrate.com/2012/06/the-side-effect-of-nolock/

14

Page 15: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Query Hints

Problem

» Query hints in the code such as FAST n, index hints, JOIN hints

Indications

» Inconsistent performance behavior

» Bad performance

» Odd looking execution plans

Solution

» Use of query hints should be exceptional

» Exceptions are rare, not standard practice

15

Page 16: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Recompiles

Problem

» Excessive blocking and CPU contention caused by constant or long statement recompiles

Indications

» Recompile events in extended events or trace

» Blocking

» High CPU usage

Solutions

» Avoid interleaving DDL & DML

» Where viable, use table variables

16

Page 17: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Row by Agonizing Row

Problem

» Cursors instead of set-based operations

» WHILE loops instead of set-based operations

» Multiple statements where 1 will do

Indications

» Extremely slow performance

Solutions

» Eliminate unnecessary row-by-row processing

17

Page 18: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Nested Views

Problem

» Views within views causes optimizer timeout

Indications

» Incredibly complex query plans for simple queries

» Very poor performance

Solutions

» Don’t nest views

» Materialize views

18

Page 19: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Writing for Readability

Define a local standard

» Object names

» Comments

» Format

» Error handling

Enforce the standard

» Document it

» Code reviews

19

Page 20: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Writing For Performance Write for your data structures

Write for your indexes

Write for the query optimizer

Avoid common issues:» Data types» Functions in comparisons» Improper use of functions» The “run faster” switch» Inappropriate Query Hints» Recompiles» Row By Agonizing Row» Nested Views

20

Page 21: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Goal

Learn methods for writing TSQL for readability

Understand how to write TSQL for performance

21

Page 22: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Get in touch

scarydba.com

[email protected]

@gfritchey

Grant Fritchey

Page 23: Top Tips for Better T-SQL

Grant Fritchey | www.ScaryDBA.com

Questions?

24