-- Test table and values
CREATE TABLE #Test (col integer PRIMARY KEY);
INSERT #Test (col)
VALUES (1), (2), (3), (4), (5);
-- Original query (scan)
SELECT T.col
FROM #Test AS T
WHERE col % 5 = 4;
-- Add computed column (no need for persisted)
ALTER TABLE #Test
ADD col_mod5 AS col % 5;
-- Index computed column
CREATE INDEX i
ON #Test (col_mod5)
INCLUDE (col);
-- Index seek
SELECT T.col
FROM #Test AS T
WHERE col % 5 = 4;
-- Tidy up
DROP TABLE #Test;
另一种方法是创建一个索引视图,从表中选择您需要的内容,加上一个带有 mod 计算的列,然后在您的查询中引用它。为此,您可以将视图声明为模式绑定,然后像创建表一样在其上创建聚簇索引。
最简单的方法是使用 mod 计算将计算列添加到表中,然后创建索引或将其添加到现有索引中。
例如:
另一种方法是创建一个索引视图,从表中选择您需要的内容,加上一个带有 mod 计算的列,然后在您的查询中引用它。为此,您可以将视图声明为模式绑定,然后像创建表一样在其上创建聚簇索引。
如果您使用的是企业版,则可能不需要更改查询即可使用视图。否则,您将需要显式引用视图并使用
NOEXPAND
提示。索引计算列是更轻量级的解决方案。