<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblogcasts.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server Blogs</title><link>http://sqlblogcasts.com/blogs/</link><description>Voices from the UK SQL Server Community</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Read Committed Snapshot Isolation– Two Considerations</title><link>http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/05/11/read-committed-snapshot-isolation-two-considerations.aspx</link><pubDate>Fri, 11 May 2012 20:27:20 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16206</guid><dc:creator>GavinPayneUK</dc:creator><slash:comments>0</slash:comments><description>&amp;#160; The Read Committed Snapshot database option in SQL Server, known perhaps more accurately as Read Committed Snapshot Isolation or RCSI, can be enabled to help readers from blocking writers and writers from blocking readers.&amp;#160; However, enabling it can cause two issues with the tempdb database which are often overlooked. One can slow down queries, the other can cause queries to fail . Overview of RCSI Enabling the option changes the behaviour of the default SQL Server isolation level, read...(&lt;a href="http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/05/11/read-committed-snapshot-isolation-two-considerations.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16206" width="1" height="1"&gt;</description></item><item><title>“Query cost (relative to the batch)” &lt;&gt; Query cost relative to batch</title><link>http://sqlblogcasts.com/blogs/sqlandthelike/archive/2012/05/10/query-cost-relative-to-the-batch-lt-gt-query-cost-relative-to-batch.aspx</link><pubDate>Thu, 10 May 2012 10:19:17 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16203</guid><dc:creator>Dave Ballantyne</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;OK, so that is quite a contradictory title, but unfortunately it is true that a common misconception is that the query with the highest percentage relative to batch is the worst performing.&amp;#160; Simply put, it is a lie, or more accurately we dont understand what these figures mean.&lt;/p&gt;  &lt;p&gt;Consider the two below simple queries:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Person.BusinessEntity
&lt;span class="kwrd"&gt;JOIN&lt;/span&gt; Person.BusinessEntityAddress
&lt;span class="kwrd"&gt;ON&lt;/span&gt; Person.BusinessEntity.BusinessEntityID = Person.BusinessEntityAddress.BusinessEntityID
&lt;span class="kwrd"&gt;go&lt;/span&gt;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Sales.SalesOrderDetail
&lt;span class="kwrd"&gt;JOIN&lt;/span&gt; Sales.SalesOrderHeader
&lt;span class="kwrd"&gt;ON&lt;/span&gt; Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID&lt;/pre&gt;

&lt;p&gt;After executing these and looking at the plans, I see this :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_725069FC.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_38CD5A05.png" width="663" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, a 13% / 87% split ,&amp;#160; but 13% / 87% of WHAT ? CPU ? Duration ? Reads ? Writes ? or some magical weighted algorithm ?&amp;#160; &lt;/p&gt;

&lt;p&gt;In a Profiler trace of the two we can find the metrics we are interested in.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_1126DDDB.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_65E246D3.png" width="660" height="48" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CPU and duration are well out but what about reads (210 and 1935)? To save you doing the maths, though you are more than welcome to, that’s a 90.2% / 9.8% split.&amp;#160; Close, but no cigar.&lt;/p&gt;

&lt;p&gt;Lets try a different tact.&amp;#160; Looking at the execution plan the “Estimated Subtree cost” of query 1 is 0.29449 and query 2 its 1.96596.&amp;#160; Again to save you the maths that works out to 13.03% and 86.97%, round those and thats the figures we are after.&amp;#160; But, what is the worrying word there ? “Estimated”.&amp;#160; &lt;/p&gt;

&lt;p&gt;So these are not “actual”&amp;#160; execution costs,&amp;#160; but what’s the problem in comparing the estimated costs to derive a meaning of “Most Costly”.&amp;#160; Well, in the case of simple queries such as the above , probably not a lot.&amp;#160; In more complicated queries , a fair bit.&lt;/p&gt;

&lt;p&gt;By modifying the second query to also show the total number of lines on each order&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; *,&lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &lt;span class="kwrd"&gt;OVER&lt;/span&gt; (PARTITION &lt;span class="kwrd"&gt;BY&lt;/span&gt; Sales.SalesOrderDetail.SalesOrderID)
 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Sales.SalesOrderDetail
&lt;span class="kwrd"&gt;JOIN&lt;/span&gt; Sales.SalesOrderHeader
&lt;span class="kwrd"&gt;ON&lt;/span&gt; Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;The split in percentages is now 6% / 94% and the profiler metrics are :&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_10BAAAE6.png"&gt;&lt;font face="Tahoma"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_1E8CF0E1.png" width="657" height="47" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;Even more of a discrepancy. &lt;/p&gt;

&lt;p&gt;Estimates can be out with actuals for a whole host of reasons,&amp;#160; scalar UDF’s are a particular bug bear of mine and in-fact the cost of a udf call is entirely hidden inside the execution plan.&amp;#160; It always estimates to 0 (well, a very small number).&lt;/p&gt;

&lt;p&gt;Take for instance the following udf&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Create&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; dbo.udfSumSalesForCustomer(@CustomerId &lt;span class="kwrd"&gt;integer&lt;/span&gt;)
&lt;span class="kwrd"&gt;returns&lt;/span&gt; money
&lt;span class="kwrd"&gt;as&lt;/span&gt;
&lt;span class="kwrd"&gt;begin&lt;/span&gt;
   &lt;span class="kwrd"&gt;Declare&lt;/span&gt; @&lt;span class="kwrd"&gt;Sum&lt;/span&gt; money
   &lt;span class="kwrd"&gt;Select&lt;/span&gt; @&lt;span class="kwrd"&gt;Sum&lt;/span&gt;= &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(SalesOrderHeader.TotalDue)
     &lt;span class="kwrd"&gt;from&lt;/span&gt; Sales.SalesOrderHeader
    &lt;span class="kwrd"&gt;where&lt;/span&gt; CustomerID = @CustomerId
   &lt;span class="kwrd"&gt;return&lt;/span&gt; @&lt;span class="kwrd"&gt;Sum&lt;/span&gt;
end&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;If we have two statements , one that fires the udf and another that doesn&amp;#39;t:&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Select&lt;/span&gt; CustomerID
  &lt;span class="kwrd"&gt;from&lt;/span&gt; Sales.Customer
 &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; CustomerID
&lt;span class="kwrd"&gt;go&lt;/span&gt;
&lt;span class="kwrd"&gt;Select&lt;/span&gt; CustomerID,dbo.udfSumSalesForCustomer(Customer.CustomerID)
  &lt;span class="kwrd"&gt;from&lt;/span&gt; Sales.Customer
 &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; CustomerID&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;The costs relative to batch is a 50/50 split, but the has to be an actual cost of firing the udf.  Indeed profiler shows us :&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_294A4836.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_092F3B79.png" width="664" height="54" /&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font face="Tahoma"&gt;No where even remotely near 50/50!!!!&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Tahoma"&gt;Moving forward to window framing functionality in SQL Server 2012 the optimizer sees ROWS and RANGE ( see &lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/archive/2011/09/22/rows-or-range-what-s-the-difference.aspx"&gt;here&lt;/a&gt; for their functional differences) as the same ‘cost’ too&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; SalesOrderDetailID,SalesOrderId,
       &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(LineTotal) &lt;span class="kwrd"&gt;OVER&lt;/span&gt;(PARTITION &lt;span class="kwrd"&gt;BY&lt;/span&gt; salesorderid 
         &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; Salesorderdetailid RANGE unbounded preceding)
&lt;span class="kwrd"&gt;from&lt;/span&gt; Sales.SalesOrderdetail
&lt;span class="kwrd"&gt;go&lt;/span&gt;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; SalesOrderDetailID,SalesOrderId,
       &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(LineTotal) &lt;span class="kwrd"&gt;OVER&lt;/span&gt;(PARTITION &lt;span class="kwrd"&gt;BY&lt;/span&gt; salesorderid 
       &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; Salesorderdetailid &lt;span class="kwrd"&gt;Rows&lt;/span&gt; unbounded preceding)
&lt;span class="kwrd"&gt;from&lt;/span&gt; Sales.SalesOrderdetail&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;By now it wont be a great display to show you the Profiler trace reads a *tiny* bit different.&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_649DADF4.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_767A41C1.png" width="687" height="55" /&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;So moral of the story, Percentage relative to batch can give a rough ‘finger in the air’ measurement, but dont rely on it as fact.&lt;/p&gt;&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16203" width="1" height="1"&gt;</description></item><item><title>Changing SQL Server Port with Powershell</title><link>http://sqlblogcasts.com/blogs/martinbell/archive/2012/05/07/Changing-SQL-Server-Port-with-Powershell.aspx</link><pubDate>Mon, 07 May 2012 16:48:00 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16198</guid><dc:creator>MartinBell</dc:creator><slash:comments>1</slash:comments><description>Powershell will be even more important when managing SQL Server on Windows Server Core so it&amp;#39;s time to build up your toolbox of scripts....(&lt;a href="http://sqlblogcasts.com/blogs/martinbell/archive/2012/05/07/Changing-SQL-Server-Port-with-Powershell.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16198" width="1" height="1"&gt;</description><category domain="http://sqlblogcasts.com/blogs/martinbell/archive/tags/POWERSHELL/default.aspx">POWERSHELL</category><category domain="http://sqlblogcasts.com/blogs/martinbell/archive/tags/WMI/default.aspx">WMI</category></item><item><title>Knowing when you’re ready to attempt to become an MCM of SQL Server</title><link>http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/05/01/knowing_2D00_when_2D00_youre_2D00_ready_2D00_to_2D00_attempt_2D00_to_2D00_become_2D00_an_2D00_mcm_2D00_of_2D00_sql_2D00_server.aspx</link><pubDate>Tue, 01 May 2012 09:09:23 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16194</guid><dc:creator>GavinPayneUK</dc:creator><slash:comments>0</slash:comments><description>Since I became a “Microsoft Certified Master of SQL Server” I’ve had lots of people asking me how I prepared, how I knew I was ready to take the exams and what they were like. At the SQLBits certification session recently I was invited on to the panel to answer questions about the “modern” MCM program. This article hopes to answer some of the questions people ask yet they will always have very personal answers. What feels difficult for me might be slightly less difficult for you yet I might make...(&lt;a href="http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/05/01/knowing_2D00_when_2D00_youre_2D00_ready_2D00_to_2D00_attempt_2D00_to_2D00_become_2D00_an_2D00_mcm_2D00_of_2D00_sql_2D00_server.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16194" width="1" height="1"&gt;</description></item><item><title>Offset without OFFSET</title><link>http://sqlblogcasts.com/blogs/sqlandthelike/archive/2012/04/26/offset-without-offset.aspx</link><pubDate>Thu, 26 Apr 2012 10:34:00 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16190</guid><dc:creator>Dave Ballantyne</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;font size="2"&gt;A while ago Robert Cary posted an article on SQL Server Central entitled &lt;/font&gt;&lt;a href="http://www.sqlservercentral.com/articles/T-SQL/66030/"&gt;&lt;font size="2"&gt;2005 Paging – The Holy Grail&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; which is, as the title would suggest about paging in SQL Server.&amp;nbsp; This article provoked some really interesting chat around the subject and is well worth a read.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;This is now a lot easier in SQL Server 2012 with the introduction of the OFFSET extension to the ORDER BY clause,&amp;nbsp; but what is the most optimal method is you are not using 2012 ?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Well, whilst playing around by the OFFSET portion of my “What’s new in SQL Server 2012 – TSQL” presentation, I hit on a different method that I’ve not seen published before.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Now whilst finding which rows are on which page is a problem, it is only &lt;em&gt;part &lt;/em&gt;of a much wider problem, that being that cost of the lookups to find other related data.&amp;nbsp; For example:&amp;nbsp; You have a list of people which you are paging through in the order of LastName,&amp;nbsp; but you also wish to display FirstName.&amp;nbsp; That is not in your index and so a key lookup occurs, &lt;em&gt;OK I could INCLUDE it in the index but im just simplifying the problem. &lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;So, to demonstrate this I need to create an index on Person.Person in AdventureWorks.&lt;/font&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Create&lt;/span&gt; &lt;span class="kwrd"&gt;index&lt;/span&gt; idxLastName &lt;span class="kwrd"&gt;on&lt;/span&gt; Person.Person(LastName)&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;font face="Tahoma"&gt;The query for the “holy grail” method would look something like this :&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;with&lt;/span&gt; ctePaging
&lt;span class="kwrd"&gt;as&lt;/span&gt;
(
&lt;span class="kwrd"&gt;Select&lt;/span&gt; LastName,FirstName,
       row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt; (&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID)-1  &lt;span class="kwrd"&gt;as&lt;/span&gt; RowN
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  Person.Person
)
&lt;span class="kwrd"&gt;Select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; ctePaging
&lt;span class="kwrd"&gt;where&lt;/span&gt; RowN &lt;span class="kwrd"&gt;between&lt;/span&gt; 20 &lt;span class="kwrd"&gt;and&lt;/span&gt; 39 
&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; RowN;&lt;/pre&gt;

&lt;p&gt;The issue here is that SQL Server has initiated an index scan (against a different index than the one we created) and had to process all the rows in the table and then sort them.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_25B3C980.png"&gt;&lt;img style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_5334E943.png" width="402" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We only want 20 rows returned so this is quite a lot of wasted effort on the engine&amp;#39;s part.&lt;/p&gt;

&lt;p&gt;OFFSET has been introduced in 2012 and running the equivalent query of :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Select&lt;/span&gt; LastName,FirstName,BusinessEntityID
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  Person.Person
 &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID
 offset 20 &lt;span class="kwrd"&gt;rows&lt;/span&gt; &lt;span class="kwrd"&gt;fetch&lt;/span&gt; &lt;span class="kwrd"&gt;next&lt;/span&gt; 20 &lt;span class="kwrd"&gt;rows&lt;/span&gt; &lt;span class="kwrd"&gt;only&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;Gives us the query plan of :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_65117D10.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_609AFC49.png" width="486" height="265" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even this is non-optimal though, as the key lookup has occurred 40 times , even though we only needed the data (in this case FirstName) for 20 rows.&lt;/p&gt;

&lt;p&gt;This can be resolved by doing the key lookup yourself.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;with&lt;/span&gt; cteKeySeek
&lt;span class="kwrd"&gt;as&lt;/span&gt;
(
&lt;span class="kwrd"&gt;Select&lt;/span&gt; LastName,BusinessEntityID
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  Person.Person
 &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID
 offset 20 &lt;span class="kwrd"&gt;rows&lt;/span&gt; &lt;span class="kwrd"&gt;fetch&lt;/span&gt; &lt;span class="kwrd"&gt;next&lt;/span&gt; 20 &lt;span class="kwrd"&gt;rows&lt;/span&gt; &lt;span class="kwrd"&gt;only&lt;/span&gt;
)
&lt;span class="kwrd"&gt;Select&lt;/span&gt; cteKeySeek.LastName,
       FirstName,
       cteKeySeek.BusinessEntityID
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  cteKeySeek
 &lt;span class="kwrd"&gt;inner&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;  Person.Person   
   &lt;span class="kwrd"&gt;on&lt;/span&gt;  cteKeySeek.BusinessEntityID =   Person.BusinessEntityID
&lt;span class="kwrd"&gt;order&lt;/span&gt;  &lt;span class="kwrd"&gt;by&lt;/span&gt; cteKeySeek.LastName,FirstName,cteKeySeek.BusinessEntityID;&lt;/pre&gt;

&lt;p&gt;Even though its longer, wordier and involves a join , it is more efficient as the join has replaced the key lookup and it is now only occurring on the 20 rows of data that we need&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_4B3D46E1.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_0B072D67.png" width="568" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Quite neat hey ? When using OFFSET it is important to remember that no magic is happening, SQL Server still has to ‘count’ and scan through the rows that are not to be processed before it can decide which ones it does need.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;A comparable query for previous versions and taking the lead from the holy grail method would be :&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;with&lt;/span&gt; cteKeySeek
&lt;span class="kwrd"&gt;as&lt;/span&gt;
(
&lt;span class="kwrd"&gt;Select&lt;/span&gt; BusinessEntityID,LastName,
       row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt; (&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID)-1 
             &lt;span class="kwrd"&gt;as&lt;/span&gt; RowN
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  Person.Person

)
&lt;span class="kwrd"&gt;Select&lt;/span&gt; cteKeySeek.LastName,FirstName,cteKeySeek.BusinessEntityID ,RowN
  &lt;span class="kwrd"&gt;from&lt;/span&gt; cteKeySeek
  &lt;span class="kwrd"&gt;inner&lt;/span&gt; loop &lt;span class="kwrd"&gt;join&lt;/span&gt;  Person.Person   
   &lt;span class="kwrd"&gt;on&lt;/span&gt;  cteKeySeek.BusinessEntityID =   Person.BusinessEntityID
&lt;span class="kwrd"&gt;where&lt;/span&gt; RowN &amp;gt;= 20 &lt;span class="kwrd"&gt;and&lt;/span&gt; rown&amp;lt;=39
&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID;&lt;/pre&gt;

&lt;p&gt;Which does similarly filter the rows before doing the index lookup&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_1F8C7CE5.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_7132F737.png" width="673" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It does however still involve a scan of 19,972 rows of which 19,932 are irrelevant to our final result set.&amp;nbsp; You may of noticed in the OFFSET versions that the TOP operator is used to filter the data and ‘stop’ the scan once it has reached the last row that we are interested in.&amp;nbsp; What if we could do something similar.&lt;/p&gt;

&lt;p&gt;What about this ?:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;with&lt;/span&gt; cteKeySeek
&lt;span class="kwrd"&gt;as&lt;/span&gt;
(
&lt;span class="kwrd"&gt;Select&lt;/span&gt; BusinessEntityID,LastName,
       row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt; (&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID)-1 
             &lt;span class="kwrd"&gt;as&lt;/span&gt; RowN
 &lt;span class="kwrd"&gt;from&lt;/span&gt;  Person.Person

)
&lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;top&lt;/span&gt;(20) cteKeySeek.LastName,FirstName,cteKeySeek.BusinessEntityID ,RowN
  &lt;span class="kwrd"&gt;from&lt;/span&gt; cteKeySeek
  &lt;span class="kwrd"&gt;inner&lt;/span&gt; loop &lt;span class="kwrd"&gt;join&lt;/span&gt;  Person.Person   
   &lt;span class="kwrd"&gt;on&lt;/span&gt;  cteKeySeek.BusinessEntityID =   Person.BusinessEntityID
&lt;span class="kwrd"&gt;where&lt;/span&gt; RowN &amp;gt;= 20 &lt;span class="kwrd"&gt;and&lt;/span&gt; RowN&amp;lt;=39
&lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; LastName,BusinessEntityID;&lt;/pre&gt;

&lt;p&gt;That does have the rather interesting effect of doing exactly that:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_498C7B0D.png"&gt;&lt;img style="border-width:0px;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_16BC7499.png" width="764" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, this is looking (at least in-terms of rowcounts) very similar to the OFFSET functionality.&amp;nbsp; If we look for a page of data further on (rows 200 to 219) and look at an profiler trace we can see how the three type of query compare.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/sqlandthelike/image_1C971832.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://sqlblogcasts.com/blogs/sqlandthelike/image_thumb_00865947.png" width="609" height="97" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So as you can see over a medium size (ish) dataset the fake and real offset are comparable in terms of IO.&lt;/p&gt;

&lt;p&gt;Hope this helps someone, who needs to do paging &lt;/p&gt;&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16190" width="1" height="1"&gt;</description></item><item><title>What to do when the solution will never be in front of you</title><link>http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/04/25/what_2D00_do_2D00_when_2D00_the_2D00_solution_2D00_will_2D00_never_2D00_be_2D00_in_2D00_front_2D00_of_2D00_you.aspx</link><pubDate>Wed, 25 Apr 2012 21:46:05 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16188</guid><dc:creator>GavinPayneUK</dc:creator><slash:comments>0</slash:comments><description>Sometimes you have a requirement which you don’t have a tool in your toolbox for.&amp;#160; When that happens the solution may not be to just get another tool and add it to your existing toolbox, it might be you have to use an entirely new type of toolbox with tools you’ve never used before in it.&amp;#160; Doing that maybe a bold architectural decision but is often where the biggest performance or functionality gains can come from. Recently, in the SQL Server space there have been some technologies become...(&lt;a href="http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/04/25/what_2D00_do_2D00_when_2D00_the_2D00_solution_2D00_will_2D00_never_2D00_be_2D00_in_2D00_front_2D00_of_2D00_you.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16188" width="1" height="1"&gt;</description></item><item><title>SQL Server Builds (April 2012)</title><link>http://sqlblogcasts.com/blogs/neilhambly/archive/2012/04/24/sql-server-builds-april-2012.aspx</link><pubDate>Tue, 24 Apr 2012 21:43:00 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16187</guid><dc:creator>NeilHambly</dc:creator><slash:comments>1</slash:comments><description>If you like me - Knowing which Build you should have deployed when we look @ the myriad of Service Packs &amp;amp; Cumulative Updates possible, it can quickly become confusing What actions should I do to &amp;quot;PATCH&amp;quot; a server to the appropriate build, So here is a quick script that can easily be updated as new builds are made available, and easily customized for your own environments -- This Script only reports on your current version and recommends your course of action - Usualy disclaimer of using...(&lt;a href="http://sqlblogcasts.com/blogs/neilhambly/archive/2012/04/24/sql-server-builds-april-2012.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16187" width="1" height="1"&gt;</description><category domain="http://sqlblogcasts.com/blogs/neilhambly/archive/tags/Builds/default.aspx">Builds</category></item><item><title>UK SQL Server (SQL Relay 2012) - 5 cities of full day content 21st May - 30th May - Overview and Deepdive - It's free too</title><link>http://sqlblogcasts.com/blogs/tonyrogerson/archive/2012/04/24/uk-sql-server-sql-relay-2012-5-cities-of-full-day-content-21st-may-30th-may-overview-and-deepdive-it-s-free-too.aspx</link><pubDate>Tue, 24 Apr 2012 13:02:00 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16185</guid><dc:creator>tonyrogerson</dc:creator><slash:comments>0</slash:comments><description>&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="background:white;margin:12pt 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;Last October {2011} we held
our the first ever &amp;quot;SQL Relay&amp;quot;, this title was chosen because it was
to be held on five consecutive days, with each of the UK regional SQL Server
User Groups hosting an evening event in a relay fashion.&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;These events were a
tremendous success; we all had a lot of FUN hosting the events, and had
received some excellent feedback from both our regular and first time attendees
to the User Group events.&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;Having known about the
impending release of SLQ Server 2012 for a while now, the same UG Leaders and
few new ones have been working tirelessly behind the scenes to organize the
“SQL” to “SQL Relay” in the imaginatively titled “SQL Relay 2012” – Hey we’re
DBAs not &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;m&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;arketing Gurus!&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;Once again, we will be
holding five days of regional events, the various user group&lt;/span&gt;&lt;span style="font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;leaders &lt;span&gt;have been working very hard in the background, this time
we are providing &lt;b&gt;five full day events&lt;/b&gt; and they are &lt;b&gt;FREE&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;These full day events will
comprise of a morning overview of SQL Server 2012, which will be given by
Microsoft speakers and Partners. The afternoon session will focus on some
deeper technical content on the 2012 features; these will be delivered by UK
SQL MVPs (Microsoft &lt;/span&gt;&lt;b&gt;&lt;span style="font-size:10pt;"&gt;M&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;"&gt;ost &lt;b&gt;&lt;span&gt;V&lt;/span&gt;&lt;/b&gt;&lt;span&gt;aluable &lt;b&gt;P&lt;/b&gt;rofessionals).
With the evening events being a great way to complete the day or join us if you
weren’t fortunate enough to be able to attend our morning or afternoon
sessions, the content of these evening events will vary from location to
location on their individual style and content – more details to follow soon.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;Each of the five events will
have their own registration and there are limitations on the number of
attendees each event can hold, so be sure to register as early as possible to
secure your place, you can attend as many or as &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;few &lt;span&gt;sessions
as you wish, just indicate your preference when registering.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;You may be asking “How much
does It Cost to attend?” &lt;b&gt;These are FREE events, due to HUGE generosity of
our sponsors.&lt;/b&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 12pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;When and Where our these
events being held&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="background:white;margin:12pt 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;21st May Edinburgh &lt;br /&gt;
&lt;a href="http://sqlserverfaq.com/?eid=378" target="_blank"&gt;&lt;span&gt;http://sqlserverfaq.com/?eid=378&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;Microsoft Edinburgh, Waverley Gate, 2-4 Waterloo
Place, Edinburgh, EH1 3EG&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="textexposedshow"&gt;22nd May Manchester &lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;&lt;a href="http://sqlserverfaq.com/?eid=373" target="_blank"&gt;&lt;span&gt;http://sqlserverfaq.com/?eid=373&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;The Co-operative, CIS Tower, Miller Street, &lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;Manchester, M60 0AL&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="textexposedshow"&gt;23rd May Birmingham &lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;&lt;a href="http://sqlserverfaq.com/?eid=357" target="_blank"&gt;&lt;span&gt;http://sqlserverfaq.com/?eid=357&lt;/span&gt;&lt;/a&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;Lakeside Centre, Aston University&amp;#39;s Conference
Centre, Birmingham, B4 7ET&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="textexposedshow"&gt;24th May Bristol &lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;&lt;a href="http://sqlserverfaq.com/?eid=391" target="_blank"&gt;&lt;span&gt;http://sqlserverfaq.com/?eid=391&lt;/span&gt;&lt;/a&gt;
&lt;/span&gt;&lt;br /&gt;
Avon Gorge Hotel, Sion Hill, Clifton, Bristol, BS8 4LD&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;font size="3" face="Times New Roman"&gt;
&lt;/font&gt;&lt;span class="textexposedshow"&gt;&lt;span style="font-size:10pt;"&gt;30th May London &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;&lt;a href="http://sqlserverfaq.com/?eid=377" target="_blank"&gt;&lt;span&gt;http://sqlserverfaq.com/?eid=377&lt;/span&gt;&lt;/a&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;Microsoft London (Cardinal Place), 100 Victoria
Street&lt;/span&gt;&lt;br /&gt;
&lt;span class="textexposedshow"&gt;London SW1E 5JL&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8.5pt;mso-ansi-language:EN;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;Aside from learning from the excellent speakers throughout the
day, you will have the chance to network as well as chances to win prizes&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;Why not bring along
a&amp;nbsp;friend/colleague – Many of you work in teams or have&amp;nbsp;SQL
professional friends, so we have a special invitation and competition for you&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;Simply register and indicate a friend you’d like to invite – if
both of you attend you also have a chance to both win a fabulous {book} prize&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;Would &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;you&lt;span&gt; &lt;/span&gt;&lt;span&gt;like to know more on
this these events? fear not as we will be providing further details over the
next few weeks in some follow-up emails &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="background:white;margin:12pt 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;We like to ensure you get the
information right @ your fingertips - So we also have also put all the relevant
information on the events @ these locations as well.&lt;/span&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 12pt;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;"&gt;FACEBOOK&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;"&gt;: &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;a href="https://www.facebook.com/SQLRelay2012"&gt;&lt;span&gt;https://www.facebook.com/SQLRelay2012&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;font face="Times New Roman"&gt; &amp;amp; &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;a href="https://www.facebook.com/SQLRelay2012/events"&gt;&lt;span&gt;https://www.facebook.com/SQLRelay2012/events&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:10pt;"&gt;LINKEDIN GROUPS:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;a href="http://www.linkedin.com/groups?gid=4153765&amp;amp;trk=hb_side_g"&gt;&lt;span&gt;http://www.linkedin.com/groups?gid=4153765&amp;amp;trk=hb_side_g&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;font face="Times New Roman"&gt;&lt;span style="font-size:10pt;"&gt; &amp;amp; &lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;a href="http://www.linkedin.com/groups?gid=2904068&amp;amp;trk=hb_side_g"&gt;&lt;span&gt;http://www.linkedin.com/groups?gid=2904068&amp;amp;trk=hb_side_g&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt; &lt;/span&gt;&lt;/font&gt;&lt;span style="font-size:10pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;b&gt;&lt;span style="font-size:10pt;"&gt;TWITTER:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;"&gt; Simply follow this hash tag for all the
latest news on the event &lt;b&gt;#sqlrelay&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="font-size:10pt;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-GB;mso-ansi-language:EN-GB;mso-fareast-font-family:Calibri;mso-bidi-language:AR-SA;"&gt;Want to attend one of
the User group events, visit our group website &lt;a href="http://www.sqlserverfaq.com/"&gt;&lt;span&gt;www.sqlserverfaq.com&lt;/span&gt;&lt;/a&gt;
for a full listing of all our events, we also have a map of all UK User Groups &lt;a href="http://tsqltidy.com/newmap/map.htm"&gt;&lt;span&gt;http://tsqltidy.com/newmap/map.htm&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-GB;mso-ansi-language:EN-GB;mso-fareast-font-family:Calibri;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-GB;mso-ansi-language:EN-GB;mso-fareast-font-family:Calibri;mso-bidi-language:AR-SA;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16185" width="1" height="1"&gt;</description></item><item><title>Microsoft Certifications – a newcomer’s guide</title><link>http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/04/23/microsoft_2D00_certifications_2D00_a_2D00_newcomers_2D00_guide.aspx</link><pubDate>Mon, 23 Apr 2012 14:01:08 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16183</guid><dc:creator>GavinPayneUK</dc:creator><slash:comments>0</slash:comments><description>At the recent SQLBits X conference I was invited onto the panel during a session about Microsoft certifications and I said I’d write a follow-up article about some of what we discussed.&amp;#160; While one of the session’s aim was to start communicating the changes the SQL Server 2012 certifications are bringing, most of the questions were about Microsoft certifications in general, although there was a disproportionately high interest in the Microsoft Certified Master.&amp;#160; I’ll cover MCM topics in...(&lt;a href="http://sqlblogcasts.com/blogs/gavinpayneuk/archive/2012/04/23/microsoft_2D00_certifications_2D00_a_2D00_newcomers_2D00_guide.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16183" width="1" height="1"&gt;</description></item><item><title>The unknown unknowns</title><link>http://sqlblogcasts.com/blogs/davidwimbush/archive/2012/04/23/the-unknown-unknowns.aspx</link><pubDate>Mon, 23 Apr 2012 10:17:00 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:16182</guid><dc:creator>DavidWimbush</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font size="2" face="verdana,geneva"&gt;I was spring cleaning some old scripts and I came across my first attempt at establishing a backup strategy. 12 hours later I&amp;#39;m still feeling a bit queasy. When I first&amp;nbsp;put on&amp;nbsp;the DBA hat, we were running&amp;nbsp;with the simple recovery model and doing a full backup every night. I did some homework and thought I&amp;#39;d got it all figured out. My killer improvement? Use full recovery and every night do a log backup and then a full backup.&amp;nbsp;That way we could recover to any point in time. Brilliant!*&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="Verdana"&gt;Since then I&amp;#39;ve learned a lot. I know I&amp;#39;m much better than I was. But I can never quite shake that small nagging doubt: how much of what I&amp;#39;m doing now - believing it&amp;#39;s&amp;nbsp;good practice - will I one day look back on and shudder? But this is a good thing. It keeps me on my toes, continually re-evaluating what I&amp;#39;m doing, and hungry to learn.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="verdana,geneva"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="2" face="verdana,geneva"&gt;*Just to be clear, I&amp;#39;m being sarcastic. This&amp;nbsp;NOT a good solution. If you have any doubts:&lt;/font&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;font size="2" face="verdana,geneva"&gt;Read Books Online about recovery models and backups. &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="verdana,geneva"&gt;Read what Paul Randal has written about it in his blog and in TechNet Magazine. &lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="verdana,geneva"&gt;Check out Ola Hallengren&amp;#39;s database maintenance solution before you write your own. &lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=16182" width="1" height="1"&gt;</description><category domain="http://sqlblogcasts.com/blogs/davidwimbush/archive/tags/Personal+Development/default.aspx">Personal Development</category></item></channel></rss>
