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

我想用一个查询进行选择。我正在尝试这个查询

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

但花了 8s 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

假设这是您的查询:

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

那么这是格式良好的。一件事,您不需要子查询中的 distinct 。

如果在 row_two 列上为 table1 添加索引,应该会获得更好的性能。table2 中 row2_one 的索引也会加快速度。

于 2012-05-25T14:08:01.880 回答
0

让我补充一下下面所说的 - 使用GROUP BYEXISTS而不是 DISTINCT 它可以真正提高你的表现。

于 2012-05-25T14:05:22.787 回答
-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 回答