繁体   English   中英

扫描SQL Server表的列中是否有2个不同值的最快方法?

[英]Quickest way to scan a SQL Server table's column for 2 different values?

我有一个包含10列的表。 第一个是主键,它是一个名为“ key”的序列int。 另一个名为“状态”。 一个名为“ test_reference”,一个名为“ warehouse”,另一个名为“ enabled”(一个标志)。 其他列可以忽略。

我需要扫描整个表,并获取表中所有具有“状态”为“ 6”或“ 7”且“已启用”为1(已启用)的行的结果集。 “状态”中的状态仅在0-7范围内(仅整数值)。

该结果集将需要经常确定(每5分钟一次),并且可能有200k +个记录。 我敢肯定有比以下方法更快的方法:

[select warehouse,
        test_reference
   from lgvftchinv
  where status in (8, 9)
    and enabled = 1]

我已经在(状态,已启用)上创建了一个索引。 但是,如果有更好的解决方案,请帮助我!

感谢您的时间。

添加一个持久的计算的[bit]列MyFlag,如果状态为8或9并且enabled = 1,则将为1,否则将其设置为0,在其上创建索引,然后进行查询“ ... where MyFlag = 1”。 这样,将在需要之前进行比较。 应该工作更快。 让我知道是否有帮助。

您可以尝试使用过滤索引,该索引将仅存储与您要查找的子集匹配的行。 并假设您在示例中选择的两列是您真正想要的仅有两列,您还可以添加INCLUDE子句以使其成为覆盖索引(因此,您甚至无需返回表即可获得这些内容)值)。 过滤索引是在SQL Server 2008 btw中引入的。

CREATE NONCLUSTERED INDEX IX_lgvftchinv_status_enabled
    ON lgvftchinv ( [status], [enabled] ) 
    INCLUDE ( warehouse, test_reference )
    WHERE [status] IN (8, 9)
        AND [enabled] = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM