7

これと同等の結果が得られるクエリを作成する最良の方法は何ですか:

SELECT X,Y,* FROM TABLE
WHERE (X = 1 AND Y = 2) OR (X = 2235 AND Y = 324) OR...

テーブルにはクラスター化されたインデックス (X、Y) があります。テーブルが巨大 (数百万) で、OR ステートメントが数百ある場合があります。

4

4 に答える 4

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 をテーブル変数として作成することもできます..

于 2012-08-30T11:30:57.913 に答える
3

何百もの X ​​値と Y 値を一時テーブルに入力して結合できると思います。

お気に入り:

DECLARE @Temp TABLE
(
X int,
Y int
)

これに検索要件を事前入力してから参加してください。

(または、検索設定を保存する他の物理テーブル。)

于 2012-08-30T11:31:52.463 に答える
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
于 2012-08-30T11:33:20.050 に答える