使用WHERE子句中的许多OR语句优化查询

wat*_*rif 7 sql sql-server sql-server-2008

编写查询的最佳方法是什么,它会给出相同的结果:

SELECT X,Y,* FROM TABLE
WHERE (X = 1 AND Y = 2) OR (X = 2235 AND Y = 324) OR...
Run Code Online (Sandbox Code Playgroud)

表具有聚簇索引(X,Y).表是巨大的(数百万),可能有数百个OR语句.

Joe*_*eph 5

您可以创建另一个包含 X 和 Y 列的表,并将值插入该表中,然后与原始表连接

create table XY_Values(X int, Y int)

Insert into XY_Values values
(1,2),
(2235,324),
...
Run Code Online (Sandbox Code Playgroud)

然后

SELECT X,Y,* FROM TABLE T
join XY_Values V
on T.X=V.X
and T.Y=V.Y
Run Code Online (Sandbox Code Playgroud)

您可以在 XY_Values 上的 (X,Y) 上创建索引,这将提高性能

您也可以创建 XY_Values 作为表变量。