代码之家  ›  专栏  ›  技术社区  ›  Mutation Person

SQL Server“In”语句项的性能顺序

  •  6
  • Mutation Person  · 技术社区  · 16 年前

    给定SQL语句:

    SELECT * 
    FROM MY_TABLE
    WHERE SomeNumberField in (0,99999)
    

    如果我能保证 MY_TABLE SomeNumberField 设置为99999,并且可以预测这将不确定地保持不变,是否最好像这样编写上述查询:

    SELECT * 
    FROM MY_TABLE
    WHERE SomeNumberField in (99999,0)
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Quassnoi    16 年前

    如果你有一个索引 SomeNumberField ,则此语句将被拆分为索引上的两个范围扫描,或作为 TABLE SCAN / CLUSTERED INDEX SCAN 用过滤器。

    如果您的大多数行具有 SomeNumberField = 999999

    范围扫描将始终按索引顺序执行,而与索引中的常量顺序无关 IN

    与获取数据页所需的时间相比,筛选器比较时间可以忽略不计。

        2
  •  1
  •   bkm    16 年前

    这种优化可以由SQL优化器自动完成,前提是您收集优化器使用的一些统计信息。您可以使用数据库供应商为此任务提供的工具。有关SQL server,请参阅以下有关MSDN的文章: http://msdn.microsoft.com/en-us/library/cc966419.aspx

    推荐文章