编写查询的最佳方法是什么,它会给出相同的结果:
SELECT X,Y,* FROM TABLE
WHERE (X = 1 AND Y = 2) OR (X = 2235 AND Y = 324) OR...
表具有聚集索引(X,Y)。 表格很大(数百万),可能有数百个OR语句。
答案 0 :(得分:4)
您可以创建另一个包含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作为表变量..
答案 1 :(得分:3)
我认为你可以用数百个X和Y值填充临时表,并加入它们。
像:
DECLARE @Temp TABLE
(
X int,
Y int
)
根据您的搜索要求预先填写,然后加入。
(或另一个保存搜索设置的物理表。)
答案 2 :(得分:3)
这会做得更好
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
答案 3 :(得分:0)
如果您使用太多或语句,执行计划将不使用索引。 最好创建多个语句并使用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...