0
table1
row_id      row_one     row_two
1           1           5
2           1           5
3           2           5
4           2           5
5           2           6

table2
row2_id     row2_one    row2_two
1           1           somevalue
2           2           somevalue2

"select distinct row_one from table1 where row_two=5"

結果

row_one
1
2

その後、選択したい

select * from table2 where row2_one=1
select * from table2 where row2_one=2

1つのクエリで選択したい。私はこのクエリを試しています

 select * from table2 where row2_one in (select distinct row_one from table1 where  
          row_two where row_two=5)

しかし、それは8秒かかりました Showing rows 0 - 14 ( 15 total, Query took 8.3255 sec)

なぜそんなに遅いのですか。早く選択したい。私を助けてください!

4

4 に答える 4

1

そこには必要ありませんDISTINCT。あなたはただ行うことができます:

SELECT * 
FROM table2 
WHERE row2_one IN (SELECT row_one FROM table1 WHERE row_two=5)

そして、使用EXISTSする方が速いかもしれません:

SELECT * 
FROM table2 A
WHERE EXISTS  (SELECT * FROM table1 WHERE row_two=5 AND row_one = A.row2_one)  
于 2012-05-25T14:06:10.343 に答える
0

以下の説明に追加させてください - DISTINCT の代わりにGROUP BYまたはEXISTSを使用すると、パフォーマンスが大幅に向上します。

于 2012-05-25T14:05:22.787 に答える
0

これがあなたのクエリであると仮定します:

select *
from table2 where row2_one in (select distinct row_one from table1 where row_two=5)

次に、これは整形式です。1 つのことは、サブクエリでの個別は必要ありません。

列 row_two の table1 にインデックスを追加すると、パフォーマンスが向上するはずです。table2 の row2_one のインデックスも高速化されます。

于 2012-05-25T14:08:01.880 に答える
-1
Select distinct table2.* 
from table1 t1, table2 t2 
where t1.row_two =5 and t1.row2_one = t2.row2_one 
于 2012-05-25T14:06:22.730 に答える