Upload
oakley
View
40
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Top Tips for Better TSQL Stored Procedures. Grant Fritchey – Red Gate Software. Goal. Learn methods for writing TSQL for readability Understand how to write TSQL for performance. Grant Fritchey. Product Evangelist for Red Gate Software Twitter: @ gfritchey Blog: scarydba.com - PowerPoint PPT Presentation
Citation preview
Grant Fritchey | www.ScaryDBA.comwww.ScaryDBA.com
Top Tips for Better TSQL Stored ProceduresGrant Fritchey – Red Gate Software
Grant Fritchey | www.ScaryDBA.com 2
Goal Learn methods for writing TSQL for
readability Understand how to write TSQL for
performance
Grant Fritchey | www.ScaryDBA.com 3
Grant Fritchey Product Evangelist for Red Gate Software Twitter: @gfritchey Blog: scarydba.com Email: [email protected]
Grant Fritchey | www.ScaryDBA.com 4
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» Null Values» Row by Agonizing Row» Nesting Views
Grant Fritchey | www.ScaryDBA.com 5
Writing for Readability Define a local standard» Object names» Comments» Format» Error handling
Enforce the standard» Document it» Code reviews
Grant Fritchey | www.ScaryDBA.com 6
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”
Grant Fritchey | www.ScaryDBA.com 7
Comments Do something Most important is describing the action,
not documentation Use source control for documentation Self-documenting code is a lie
Grant Fritchey | www.ScaryDBA.com 8
Error Handling TRY/CATCH Deadlocks Establish local best practices
Grant Fritchey | www.ScaryDBA.com 9
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
Grant Fritchey | www.ScaryDBA.com 10
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
Grant Fritchey | www.ScaryDBA.com 11
Data Types Problem» Implicit or explicit data type conversion
Indications» Scans» Slow performance
Solution» Use appropriate data types
Grant Fritchey | www.ScaryDBA.com 12
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
Grant Fritchey | www.ScaryDBA.com 13
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
Grant Fritchey | www.ScaryDBA.com 14
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
Grant Fritchey | www.ScaryDBA.com 15
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
Grant Fritchey | www.ScaryDBA.com 16
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
Grant Fritchey | www.ScaryDBA.com 17
NULL Values Problem» Incorrect data returned due to improper
use of NULL Indications»= and <> instead of IS NULL and IS NOT
NULL Solutions» Learn to use NULL properly
Grant Fritchey | www.ScaryDBA.com 18
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
Grant Fritchey | www.ScaryDBA.com 19
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
Grant Fritchey | www.ScaryDBA.com 20
Goal Learn methods for writing TSQL for
readability Understand how to write TSQL for
performance
Grant Fritchey | www.ScaryDBA.com 21
Writing for Readability Define a local standard» Object names» Comments» Format» Error handling
Enforce the standard» Document it» Code reviews
Grant Fritchey | www.ScaryDBA.com 22
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
Grant Fritchey | www.ScaryDBA.com 23
Grant Fritchey Product Evangelist for Red Gate Software Twitter: @gfritchey Blog: scarydba.com Email: [email protected]
Grant Fritchey | www.ScaryDBA.com 24
Questions?
How would you… ?
What happens when… ?
Why does… ?
When do I… ?