|  | Posted by Dave on 01/05/07 17:23 
We are using SQL 2K Enterprise SP4.
 Erland that was an excellent post!  However it was not my problem.  The
 code is run from .NET application and I am testing using SQL Management
 Studio.
 
 I added this to the test script and it did not help.
 SET ANSI_NULLS  ON
 
 
 I think there are two things going on here.
 1. SQL Server is not picking the best plan
 2. There is an issue with my specific data set that I can not reproduce
 with any other dataset except for "some" subsets or supersets.
 
 
 Thanks for the help guys!!!
 
 
 
 Erland Sommarskog wrote:
 > Dave (daveg.01@gmail.com) writes:
 > > Your correlated subquery works.
 > > It added a stream aggregate step to the execution plan right before the
 > > merge join.
 > >
 > > This is really weird.  Could it be an SQL Server Bug?  Like I said
 > > earlier, it is very data specific.  I can add 3 million random records
 > > to the filter table and it normally works fine.  It is only this
 > > specific dataset that is causing problems.
 >
 >
 > Note that the two queries are not semantically equivalent. If a certain
 > email address appears four times in the filter and four times in base, your
 > original query will return 16 rows, while mine will return four.
 >
 > With the numbers you posted there are only four duplicates in the filter.
 > Provided, that is, you are running with ANSI_NULLS ON. If this is in a
 > stored procedure saved from Enterprise Manager, you are likely to be running
 > with ANSI_NULLS OFF, in which case NULL = NULL, and you will get an
 > enormous number of duplicates. Which are filtered away if you add the
 > IS NOT NULL filter.
 >
 >
 > --
 > Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
 >
 > Books Online for SQL Server 2005 at
 > http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
 > Books Online for SQL Server 2000 at
 > http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
  Navigation: [Reply to this message] |