我有一个有10列的表。第一个是主键,是一个名为" key"的序列int。另一个名为" status"。一个名为" test_reference",一个名为"仓库",一个名为"启用" (一只旗)。其他列可以忽略。
我需要扫描整个表并获得表中具有"状态"的所有行的结果集。任何" 6"或" 7","启用"是1(启用)。状态"状态"仅范围为0-7(仅限整数值)。
此结果集需要经常确定(每5分钟一次),并且可能需要200k +记录。我确信这比以下更快:
[select warehouse,
test_reference
from lgvftchinv
where status in (8, 9)
and enabled = 1]
我已经创建了一个索引(状态,已启用)。但如果那里有更好的解决方案,请帮助我!
感谢您的时间。
答案 0 :(得分:1)
添加一个持久的计算[bit]列MyFlag,如果status为8或9且enabled = 1则为1,否则将其设置为0,在其上创建索引,然后进行查询“...其中MyFlag = 1” 。这样,比较将在您需要之前完成。应该更快地工作。如果有帮助,请告诉我。
答案 1 :(得分: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