编写查询的最佳方法是什么,这将给出等效的结果:
SELECT X,Y,* FROM TABLE
WHERE (X = 1 AND Y = 2) OR (X = 2235 AND Y = 324) OR...
表有聚集索引 (X, Y)。表很大(数百万),可能有数百个 OR 语句。
编写查询的最佳方法是什么,这将给出等效的结果:
SELECT X,Y,* FROM TABLE
WHERE (X = 1 AND Y = 2) OR (X = 2235 AND Y = 324) OR...
表有聚集索引 (X, Y)。表很大(数百万),可能有数百个 OR 语句。
您可以创建另一个包含 X 和 Y 列的表并在该表中插入值,然后与原始表连接
create table XY_Values(X int, Y int)
Insert into XY_Values values
(1,2),
(2235,324),
...
然后
SELECT X,Y,* FROM TABLE T
join XY_Values V
on T.X=V.X
and T.Y=V.Y
您可以在 XY_Values 上的 (X,Y) 上创建索引,这将提高性能
您也可以将 XY_Values 创建为表变量。
这会做得更好
select t.*
from table t
join (select 1 as x,2 as y
union
...) t1 on t.x=t1.x and t.y=t1.y
我认为您可以用数百个 X 和 Y 值填充临时表,然后加入它们。
喜欢:
DECLARE @Temp TABLE
(
X int,
Y int
)
预先填写您的搜索要求,然后加入。
(或保存搜索设置的其他物理表。)
如果您使用太多 or 语句,则执行计划不会使用索引。最好创建多个语句并使用 union all 合并结果。
SELECT X,Y,*
FROM TABLE
WHERE (X = 1 AND Y = 2)
union all
SELECT X,Y,*
FROM TABLE
WHERE (X = 2235 AND Y = 324)
union all...