Article ID: 140606
Article Last Modified on 10/16/2003
APPLIES TO
- Microsoft SQL Server 6.0 Standard Edition
- Microsoft SQL Server 6.5 Standard Edition
This article was previously published under Q140606
BUG# NT: 12057 (6.00) 15670 (6.50)
SYMPTOMS
A SELECT query containing an ORDER BY DESC clause can sometimes cause a high number of logical reads in SQL Server 6.0.
CAUSE
This can occur if the optimizer chooses to process the query by using an index on the ordered column and the WHERE clause of the query includes a range search such as the following:
SELECT * FROM inv_table WHERE inv_no BETWEEN 100 AND 500 ORDER BY inv_no DESC
You can determine whether the optimizer has chosen to use an index by using the SET SHOWPLAN ON command and viewing the showplan output as documented in Chapter 23 of the SQL Server "Administrator's Companion." You can view the number of logical reads for the query by using the SET STATISTICS IO ON command.
WORKAROUND
Restructure the query to use an intermediate temporary table such as the following:
SELECT * INTO #tmp_inv FROM inv_table WHERE inv_no BETWEEN 100 AND 500 SELECT * FROM #tmp_inv ORDER BY inv_no DESC
Note that this workaround should only be necessary in rare circumstances. Testing should be done to determine if the workaround uses fewer logical reads than the original query in your environment.
STATUS
Microsoft has confirmed this to be a problem in Microsoft SQL Server version 6.0. This problem has been corrected in U.S. Service Pack 2 for Microsoft SQL Server version 6.5. For more information, contact your primary support provider.
Additional query words: sql6 performance
Keywords: kbbug kbfix kbprogramming KB140606