<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SQL Tips by Namwar Rizvi &#187; SCHEMABINDING</title>
	<atom:link href="http://sqltips.wordpress.com/category/schemabinding/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqltips.wordpress.com</link>
	<description>SQL Tips and Tricks by Namwar Rizvi</description>
	<lastBuildDate>Mon, 31 Aug 2009 22:21:46 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='sqltips.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ed069197b1591bd81b1bcccb593c4d5f?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>SQL Tips by Namwar Rizvi &#187; SCHEMABINDING</title>
		<link>http://sqltips.wordpress.com</link>
	</image>
			<item>
		<title>Improving Performance of UDF by using SCHEMABINDING</title>
		<link>http://sqltips.wordpress.com/2007/05/02/improving-performance-of-udf-by-using-schemabinding/</link>
		<comments>http://sqltips.wordpress.com/2007/05/02/improving-performance-of-udf-by-using-schemabinding/#comments</comments>
		<pubDate>Wed, 02 May 2007 22:49:00 +0000</pubDate>
		<dc:creator>namwar</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[SCHEMABINDING]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[UDF]]></category>

		<guid isPermaLink="false">http://sqltips.wordpress.com/2007/05/02/improving-performance-of-udf-by-using-schemabinding/</guid>
		<description><![CDATA[Ever wondered what happens to your queries when you use some UDF which does not touch any table but even then your query becomes slow???How can we improve that query?Most of us think that there is no other way except to remove UDF in this scenario.
May be that can be one solution but take a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqltips.wordpress.com&blog=1606781&post=8&subd=sqltips&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ever wondered what happens to your queries when you use some UDF which does not touch any table but even then your query becomes slow???<br />How can we improve that query?<br />Most of us think that there is no other way except to remove UDF in this scenario.</p>
<p>May be that can be one solution but take a closer look at query plan and you will find &#8220;Spooler&#8221; operator whose functionality according to Microsoft definition is<br /><span style="font-weight:bold;">&#8220;Stores the data from the input into a temporary table in order to optimize rewinds&#8221;</p>
<p><span style="font-weight:bold;"></span></span>SQL Server 2005 uses this operator when the UDF is not <span style="font-weight:bold;">SCHEMABIND</span> to ensure that any DDL change will not break the operation of UDF.<br /><span style="font-weight:bold;"><br /></span>This extra step slows down the query execution. To get the best performance, make sure you always bind your UDF even if it is not using any table or view.</p>
<p>Following is the simple example to demonstrate this behavior:</p>
<div class="Section1">
<p class="MsoNormal"><span style="font-family:'Courier New';font-size:10px;color:blue;">Set</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">NoCount</span> <span style="color:blue;">On<br /></span></span><span style="font-family:'Courier New';font-size:10px;color:green;">&#8211;Create  Sample Table</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">CREATE</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">TABLE</span> dbo<span style="color:gray;">.</span>tblItems</span><br /><span style="font-family:'Courier New';font-size:10px;color:gray;">(</span><br /><span style="font-family:'Courier New';font-size:10px;">ItemID <span style="color:blue;">int</span> <span style="color:gray;">NOT</span> <span style="color:gray;">NULL</span> <span style="color:blue;">IDENTITY</span> <span style="color:gray;">(</span>1<span style="color:gray;">,</span> 1<span style="color:gray;">),</span><br />ItemName <span style="color:blue;">nvarchar</span><span style="color:gray;">(</span>50<span style="color:gray;">)</span> <span style="color:gray;">NOT</span> <span style="color:gray;">NULL</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:gray;">)</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">ON</span> [PRIMARY]<br />GO</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">ALTER</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">TABLE</span> dbo<span style="color:gray;">.</span>tblItems  <span style="color:blue;">ADD</span> <span style="color:blue;">CONSTRAINT</span><br />PK_Table_1 <span style="color:blue;">PRIMARY</span> <span style="color:blue;">KEY</span> <span style="color:blue;">CLUSTERED</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:gray;">(</span><span style="font-family:'Courier New';font-size:10px;"> ItemID <span style="color:gray;">)</span><br />GO </span><br /><span style="font-family:'Courier New';font-size:10px;color:green;">&#8211;Insert  100000 rows</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;Inserting 100000 rows-Start:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Declare</span><span style="font-family:'Courier New';font-size:10px;"> @m_Counter <span style="color:blue;">int</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Select</span><span style="font-family:'Courier New';font-size:10px;"> @m_Counter<span style="color:gray;">=</span>1</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">While</span><span style="font-family:'Courier New';font-size:10px;"> @m_Counter <span style="color:gray;">&lt;</span>100001</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Begin</span><br /><span style="font-family:'Courier New';font-size:10px;">      <span style="color:blue;">Insert</span> <span style="color:blue;">Into</span> dbo<span style="color:gray;">.</span>tblItems <span style="color:gray;">(</span>ItemName<span style="color:gray;">)</span> <span style="color:blue;">Values</span><br /><span style="color:gray;">(</span><span style="color:red;">&#8216;ItemNo:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span>@m_Counter<span style="color:gray;">))</span><br />     <span style="color:blue;">Select</span> @m_Counter<span style="color:gray;">=</span>@m_Counter<span style="color:gray;">+</span>1</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">End</span><br /><span style="font-family:'Courier New';font-size:10px;">Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;Inserting 100000 rows-Finish:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go<br /></span><span style="font-family:'Courier New';font-size:10px;color:green;">&#8211;Create a  Sample UDF without Schema Binding</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">CREATE</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">FUNCTION</span> dbo<span style="color:gray;">.</span>SetValueWithoutSchemaBinding<span style="color:gray;">(</span>@p_value <span style="color:blue;">nvarchar</span><span style="color:gray;">(</span>50<span style="color:gray;">))</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">RETURNS</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">nvarchar</span><span style="color:gray;">(</span>50<span style="color:gray;">)</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">BEGIN</span><br /><span style="font-family:'Courier New';font-size:10px;">   <span style="color:blue;">RETURN</span> @p_value<span style="color:gray;">+</span><span style="color:red;">&#8216;-&#8217;</span><span style="color:gray;">+</span> <span style="color:red;">&#8216;WO&#8217;</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">END</span><br /><span style="font-family:'Courier New';font-size:10px;">Go </span><br /><span style="font-family:'Courier New';font-size:10px;color:green;">&#8211;Create a  Sample UDF with Schema Binding</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">CREATE</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">FUNCTION</span> dbo<span style="color:gray;">.</span>SetValueWithSchemaBinding<span style="color:gray;">(</span>@p_value <span style="color:blue;">nvarchar</span><span style="color:gray;">(</span>50<span style="color:gray;">))</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">RETURNS</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">nvarchar</span><span style="color:gray;">(</span>50<span style="color:gray;">)</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">With</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:blue;">SchemaBinding</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">BEGIN</span><br /><span style="font-family:'Courier New';font-size:10px;">   <span style="color:blue;">RETURN</span> @p_value<span style="color:gray;">+</span><span style="color:red;">&#8216;-&#8217;</span><span style="color:gray;">+</span> <span style="color:red;">&#8216;W&#8217;</span></span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">END</span><br /><span style="font-family:'Courier New';font-size:10px;">Go </span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;Without SchemaBinding Update Start:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Update</span><span style="font-family:'Courier New';font-size:10px;"> dbo<span style="color:gray;">.</span>tblItems</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Set</span><span style="font-family:'Courier New';font-size:10px;"> ItemName<span style="color:gray;">=</span>dbo<span style="color:gray;">.</span>SetValueWithoutSchemaBinding<span style="color:gray;">(</span>ItemName<span style="color:gray;">)</span><br />Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;Without SchemaBinding Update Finish:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go </span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;With SchemaBinding Update Start:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Update</span><span style="font-family:'Courier New';font-size:10px;"> dbo<span style="color:gray;">.</span>tblItems</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Set</span><span style="font-family:'Courier New';font-size:10px;"> ItemName<span style="color:gray;">=</span>dbo<span style="color:gray;">.</span>SetValueWithSchemaBinding<span style="color:gray;">(</span>ItemName<span style="color:gray;">)</span><br />Go</span><br /><span style="font-family:'Courier New';font-size:10px;color:blue;">Print</span><span style="font-family:'Courier New';font-size:10px;"> <span style="color:red;">&#8216;With SchemaBinding Update Finish:&#8217;</span><span style="color:gray;">+</span><span style="color:fuchsia;">convert</span><span style="color:gray;">(</span><span style="color:blue;">varchar</span><span style="color:gray;">,</span><span style="color:fuchsia;">GetDate</span><span style="color:gray;">(),</span>113<span style="color:gray;">)</span><br />Go</span></p>
<p><span style="font-family:'Courier New';font-size:10px;"></span><span style="font-weight:bold;">Following is the output which shows 50% improvements (4 seconds to 2 seconds) </span>
<p class="MsoNormal"><span style="font-size:85%;"><span style="font-family:verdana;">Inserting 100000 rows-Start:03 May 2007 00:13:41:670<br /></span><br /><span style="font-family:verdana;">Inserting 100000 rows-Finish:03 May 2007 00:14:26:590<br /></span><br /><span style="font-family:verdana;">Without SchemaBinding Update Start:03 May 2007 00:14:26:640<br /></span><br /><span style="font-family:verdana;">Without SchemaBinding Update Finish:03 May 2007 00:14:30:843<br /></span><br /><span style="font-family:verdana;">With SchemaBinding Update Start:03 May 2007 00:14:30:843<br /></span></span></p>
<p class="MsoNormal"><span style="font-size:85%;"><span style="font-family:verdana;">With SchemaBinding Update Finish:03 May 2007 00:14:32:340</span></span></p>
</div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/sqltips.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/sqltips.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqltips.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqltips.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqltips.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqltips.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqltips.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqltips.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqltips.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqltips.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqltips.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqltips.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqltips.wordpress.com&blog=1606781&post=8&subd=sqltips&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sqltips.wordpress.com/2007/05/02/improving-performance-of-udf-by-using-schemabinding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f594e19b68c1c1098c99fb65c67717f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">namwar</media:title>
		</media:content>
	</item>
	</channel>
</rss>