FIX: SQL Server 优化器可能低估范围查询的基数

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 816883
本文已归档。它按“原样”提供,并且不再更新。
BUG #: 364245 (SQL Server 8.0)
症状
SQL Server 优化器可能不正确地估计表达式的基数如果满足下列所有条件都都为真:
  • 查询指定如列之间的两个不同的范围条件 x 和 y 或列 > x。
  • 这两个范围谓词限定 AND 条件。
  • 直方图是可用的对于每个两列、 从手动或自动创建统计信息或从一个索引,为其前导列指定列。
  • 多列密度为可用于两列的组合。
下面的查询是一个查询,可能会受此问题的一个示例:
SELECT *FROM    a  WHERE	 a.[SALESORG] BETWEEN 'B001' AND 'B099'  AND     	 a.[SOLD_TO] BETWEEN 'B000000001' AND 'B000010000' 
此的示例在直方图必须存在 SALESORGSOLD_TO,并且 SALESORG 和 $ SOLD_TO 的组合必须存在统计。

由于此的错误的 SQL Server 优化器通常低估从这样的谓词的行数。SQL Server 优化程序可能会选择不是有效的计划,例如,使用索引查找未能使用匹配的索引视图或索引扫描时更适合,使用一个不正确的联接的顺序。
解决方案

服务包信息

若要解决此问题,获得最新的 service pack,对于 Microsoft SQL Server 2000。有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290211如何获取最新的 SQL Server 2000 服务包

修补程序信息

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。其格式为协调通用时间 (UTC) 列出日期和时间对这些文件。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间工具中的 时区 选项卡。
Date         Time   Version            Size    File name--------------------------------------------------------------27-Mar-2003  02:47  2.4.1.0        11,172,351  Sql2000-kb810185-8.00.0794-enu.exe
注意由于存在文件依赖性最新的修补程序或功能,它包含这些文件可能还包含其他文件。

状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。Microsoft SQL Server 2000 Service Pack 4 中,第一次已得到纠正此问题。
更多信息
使用跟踪标记 9256 时,才启用此修复程序。有关使用跟踪标记的详细信息请参阅 SQL Server 2000 丛书联机。

属性

文章 ID:816883 - 上次审阅时间:02/26/2014 23:30:42 - 修订版本: 10.3

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 标准版, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Enterprise Edition 64-bit

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB816883 KbMtzh
反馈