<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Alexander Kuznetsov</title><subtitle type="html" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/atom.aspx</id><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/default.aspx" /><link rel="self" type="application/atom+xml" href="http://sqlblog.com/blogs/alexander_kuznetsov/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.1">Community Server</generator><updated>2009-07-07T20:47:00Z</updated><entry><title>On filtered indexes and defensive coding</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/05/on-filtered-indexes-and-defensive-coding.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/05/on-filtered-indexes-and-defensive-coding.aspx</id><published>2010-02-05T15:16:00Z</published><updated>2010-02-05T15:16:00Z</updated><content type="html">When one and the same constant is copied and pasted in more than one place, there is always a chance that we can change it in one place and fail to change in another, resulting in a discrepancy. For example, recently I read a very interesting post by Michelle Ufford, Filtered Indexes Work-Around. I will not repeat the whole post here, I encourage you to read it in full, but here are the relevant parts. There is a filtered index: CREATE NONCLUSTERED INDEX MyLatestData ON dbo.myTable ( myDate ) Include...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/05/on-filtered-indexes-and-defensive-coding.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=21875" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author></entry><entry><title>Multi-statement TVFs are essentially slowish nested loops.</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/02/multiline-tvfs-are-essentially-slowish-nested-loops.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/02/multiline-tvfs-are-essentially-slowish-nested-loops.aspx</id><published>2010-02-02T20:53:00Z</published><updated>2010-02-02T20:53:00Z</updated><content type="html">Whenever we are using multi-statement TVFs, we are essentially forcing nested loops logic on the database engine. Although multi-statement TVFs are smart enough and do not always execute once per row, when they do so, they may be much slower than nested loops. As usual, inline UDFs shine as compared to multi-statement ones, at least in all the benchmarks in this post - let us run some tests and see for ourselves. Setting up data First of all, here is a table, rather large, 512K rows, and rather wide,...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/02/multiline-tvfs-are-essentially-slowish-nested-loops.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=21727" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="Inline UDFs" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Inline+UDFs/default.aspx" /></entry><entry><title>Don't swap horses in midstream.</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/01/don-t-swap-horses-in-midstream.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/01/don-t-swap-horses-in-midstream.aspx</id><published>2010-02-01T19:07:00Z</published><updated>2010-02-01T19:07:00Z</updated><content type="html">We can begin a transaction under snapshot isolation, but we cannot switch to it in the middle of an outstanding transaction. For example, the following procedure looks good and passes a smoke test: CREATE PROCEDURE dbo.SelectCountry @CountrySymbol CHAR ( 2 ) AS BEGIN ; SET TRANSACTION ISOLATION LEVEL SNAPSHOT ; SELECT CountrySymbol , Description FROM data.Countries WHERE CountrySymbol = @CountrySymbol ; END ; GO -- Smoke test: this call completes EXECUTE dbo.SelectCountry @CountrySymbol = 'US' ;...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/02/01/don-t-swap-horses-in-midstream.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=21671" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="Defensive programming" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Defensive+programming/default.aspx" /><category term="snapshot isolation" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/snapshot+isolation/default.aspx" /></entry><entry><title>Correlated subqueries do not execute once per row.</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/20/correlated-subqueries-do-not-execute-once-per-row.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/20/correlated-subqueries-do-not-execute-once-per-row.aspx</id><published>2010-01-20T23:08:00Z</published><updated>2010-01-20T23:08:00Z</updated><content type="html">Correlated subqueries do not have to execute once per row - on the contrary, they are equivalent to outer joins, and they may have the same execution plans and the same real execution costs (if we retrieve only one column via a correlated subquery, of course) Let me provide a script which compares the performance of a query with one correlated subquery vs. an equivalent out join. First, we need two tables for our example: CREATE TABLE dbo.Parent ( ID INT NOT NULL PRIMARY KEY , ParentNumber INT NOT...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/20/correlated-subqueries-do-not-execute-once-per-row.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=21292" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /></entry><entry><title>When acquiring locks in the same order is not possible or not feasible.</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/15/when-acquiring-locks-in-the-same-order-is-not-possible-or-not-feasible.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/15/when-acquiring-locks-in-the-same-order-is-not-possible-or-not-feasible.aspx</id><published>2010-01-15T21:18:00Z</published><updated>2010-01-15T21:18:00Z</updated><content type="html">To avoid deadlocks, one of the most common recommendations is "to acquire locks in the same order" or "access objects in the same order". Clearly this makes perfect sense, but is it always feasible? Is it always possible? I keep encountering cases when I cannot follow this advice. If I store an object in one parent table and one or more child ones, I cannot follow this advice at all. When inserting, I need to insert my parent row first. When deleting, I have to do it in the opposite order. If I use...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/15/when-acquiring-locks-in-the-same-order-is-not-possible-or-not-feasible.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=21095" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="Defensive programming" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Defensive+programming/default.aspx" /><category term="Deadlocks" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Deadlocks/default.aspx" /></entry><entry><title>T-SQL Tuesday #002: patterns that do not work as expected.</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/12/t-sql-tuesday-002-patterns-that-do-not-work-as-expected.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/12/t-sql-tuesday-002-patterns-that-do-not-work-as-expected.aspx</id><published>2010-01-12T14:38:00Z</published><updated>2010-01-12T14:38:00Z</updated><content type="html">Neither UPDATE … IF (@@ROWCOUNT = 0) INSERT nor IF EXISTS(...) UPDATE ELSE INSERT patterns work as expected under high concurrency. Both may fail. Both may fail very frequently. MERGE is the king - it holds up much better.Let us do some stress testing and see for ourselves. Here is the table we shall be using: CREATE TABLE dbo.TwoINTs ( ID INT NOT NULL PRIMARY KEY , i1 INT NOT NULL , i2 INT NOT NULL , version ROWVERSION ) ; GO INSERT INTO dbo.TwoINTs ( ID , i1 , i2 ) VALUES ( 1 , 0 , 0 ) ; IF EXISTS(…)...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/12/t-sql-tuesday-002-patterns-that-do-not-work-as-expected.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=20931" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="Defensive programming" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Defensive+programming/default.aspx" /><category term="Stress Testing" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Stress+Testing/default.aspx" /></entry><entry><title>Retrying after deadlocks leads to lost updates</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/08/retrying-after-deadlocks-leads-to-lost-updates.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/08/retrying-after-deadlocks-leads-to-lost-updates.aspx</id><published>2010-01-08T15:15:00Z</published><updated>2010-01-08T15:15:00Z</updated><content type="html">When we retry after deadlocks, we are very likely to overwrite other processes' changes. We need to be aware that very likely someone else modified the data we intended to modify. Especially if all the readers run under snapshot isolation, then readers cannot be involved in deadlocks, which means that all the parties involved in a deadlock are writers, modified or attempted to modify the same data. If we just catch the exception and automatically retry, we can overwrite someone else's changes. This...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2010/01/08/retrying-after-deadlocks-leads-to-lost-updates.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=20732" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author></entry><entry><title>To design or not to design?</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/to-design-or-not-to-design.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/to-design-or-not-to-design.aspx</id><published>2009-12-08T22:18:00Z</published><updated>2009-12-08T22:18:00Z</updated><content type="html">Clearly Linux is one of the most successful products ever. Let me quote a little bit from Linus Torvalds and other brilliant people involved in it: "A strong vision and a sure hand sound like good things on paper. It's just that I have never _ever_ met a technical person (including me) whom I would trust to know what is really the right thing to do in the long run. Too strong a strong vision can kill you - you'll walk right over the edge, firm in the knowledge of the path in front of you." here "The...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/to-design-or-not-to-design.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=19646" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Agile Development" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Agile+Development/default.aspx" /><category term="Database Design" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Database+Design/default.aspx" /></entry><entry><title>T-SQL Tuesday #001: Yesterday it worked, today it's not working...</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/t-sql-tuesday-001-yesterday-it-worked-today-it-s-not-working.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/t-sql-tuesday-001-yesterday-it-worked-today-it-s-not-working.aspx</id><published>2009-12-08T16:06:00Z</published><updated>2009-12-08T16:06:00Z</updated><content type="html">But did it actually work yesterday? If the day is Friday, Noverber 13th, or the 13th day of any other month, and your query blows up for the first time, one place to search for is character strings converted to datetime values. The following script illustrates the problem: -- yesterday it worked, or did it? SET LANGUAGE US_English ; SELECT CAST ( '11/12/2009' AS DATETIME ); SET LANGUAGE Norwegian ; SELECT CAST ( '11/12/2009' AS DATETIME ); Changed language setting to us_english. -----------------------...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/12/08/t-sql-tuesday-001-yesterday-it-worked-today-it-s-not-working.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=19623" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="T-SQL Tuesday" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/T-SQL+Tuesday/default.aspx" /><category term="datetime" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/datetime/default.aspx" /></entry><entry><title>PIVOting dense data may speed up your queires</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/11/20/pivoting-dense-data-may-speed-up-your-queires.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/11/20/pivoting-dense-data-may-speed-up-your-queires.aspx</id><published>2009-11-20T18:53:00Z</published><updated>2009-11-20T18:53:00Z</updated><content type="html">Of course, PIVOting uses up some CPU. However, if the data is dense (all the cells in the pivoted result set are not NULL), then the size of the pivoted result set may be significantly less. As a result, the overall time to retrieve a pivoted result set and transmit it over the network may be less. Here are my benchmarks. Let us create a helper table with 1M numbers: CREATE TABLE dbo.Numbers ( n INT NOT NULL PRIMARY KEY ); GO TRUNCATE TABLE dbo.Numbers ; INSERT INTO dbo.Numbers ( n ) VALUES ( 1 );...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/11/20/pivoting-dense-data-may-speed-up-your-queires.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=19040" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author></entry><entry><title>Speaking in Chicago on Sep 10</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/08/17/speaking-in-chicago-on-sep-10.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/08/17/speaking-in-chicago-on-sep-10.aspx</id><published>2009-08-17T20:31:00Z</published><updated>2009-08-17T20:31:00Z</updated><content type="html">I'll be speaking about Defensive Database Programming in Chicago on Sep 10 at 5:30PM. http://chicago.sqlpass.org/ The seating is limited to 50, You must RSVP to attend Share this post: email it! | bookmark it! | digg it! | reddit! | kick it! | live it!...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/08/17/speaking-in-chicago-on-sep-10.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=16076" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author></entry><entry><title>When you add an index and your query blows up...</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/16/when-you-add-an-index-and-your-query-blows-up.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/16/when-you-add-an-index-and-your-query-blows-up.aspx</id><published>2009-07-16T21:39:00Z</published><updated>2009-07-16T21:39:00Z</updated><content type="html">You cannot assume that the conditions in your WHERE clause will evaluate in the left-to-write order - making such assumptions leads to unsafe queries. For example, the following query is not safe: SELECT * FROM dbo.Messages WHERE ISDATE ( VarcharColumn ) = 1 AND CAST ( VarcharColumn ) AS DATETIME ) = '20090707' It can blow up at any time, and the reason is simple: the conditions in your WHERE clause can evaluate in any order, and the order can change the next time your query executes. If an invalid...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/16/when-you-add-an-index-and-your-query-blows-up.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=15300" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author></entry><entry><title>Saving the whole team of players or nothing</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/15/saving-the-whole-team-or-nothing.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/15/saving-the-whole-team-or-nothing.aspx</id><published>2009-07-15T18:28:00Z</published><updated>2009-07-15T18:28:00Z</updated><content type="html">Suppose that you need to store teams of players, and you must enforce the following business rule: each team must consist of exactly two players. I will demonstrate how you can use constraints to implement this rule. I haven't used this approach in production yet, but I wanted to share an interesting idea. Of course we typically use triggers or stored procedures to implement such rules, but you can do it with constraints too, and it is worth mentioning at least as a brainteaser. Detailed comparison...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/15/saving-the-whole-team-or-nothing.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=15288" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="Business rules" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Business+rules/default.aspx" /><category term="constraints" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/constraints/default.aspx" /></entry><entry><title>Optimizing yet another query that involves highly correlated columns</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/13/optimizing-yet-another-query-that-involves-highly-correlated-columns.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/13/optimizing-yet-another-query-that-involves-highly-correlated-columns.aspx</id><published>2009-07-13T22:15:00Z</published><updated>2009-07-13T22:15:00Z</updated><content type="html">In some cases some of the columns involved in a query are highly correlated. If you manage to communicate to the optimizer that valuable information, it may come up with a more efficient plan. For example, consider the following table (the script that populates it is at the end of this post): CREATE TABLE dbo.Events ( EventID INT NOT NULL PRIMARY KEY , EventTime DATETIME NOT NULL, SomeMoreData CHAR ( 10 ) ); Suppose that your system inserts events one by one, that EventID keeps increasing as your...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/13/optimizing-yet-another-query-that-involves-highly-correlated-columns.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=15251" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="Transact SQL" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/Transact+SQL/default.aspx" /><category term="query performance" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/query+performance/default.aspx" /></entry><entry><title>Using CROSS APPLY to optimize joins on BETWEEN conditions</title><link rel="alternate" type="text/html" href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/07/using-cross-apply-to-optimize-joins-on-between-conditions.aspx" /><id>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/07/using-cross-apply-to-optimize-joins-on-between-conditions.aspx</id><published>2009-07-08T00:47:00Z</published><updated>2009-07-08T00:47:00Z</updated><content type="html">Recently I encountered a case when I knew much more about the data than the optimizer. Originally the performance was horrible, this is why I had to have a look at the query in the first place. When I was able to share my knowledge with the optimizer, it produced a better plan, and the query ran dramatically faster. The slow query The following tables store one-munite commercials for every minut for one year, and customer calls, one call per minute, for the same year. The scripts that populate tables...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/07/using-cross-apply-to-optimize-joins-on-between-conditions.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=15148" width="1" height="1"&gt;</content><author><name>Alexander Kuznetsov</name><uri>http://sqlblog.com/members/Alexander+Kuznetsov.aspx</uri></author><category term="SQL Server" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/SQL+Server/default.aspx" /><category term="query performance" scheme="http://sqlblog.com/blogs/alexander_kuznetsov/archive/tags/query+performance/default.aspx" /></entry></feed>