Re: exists
От | Joseph Shraibman |
---|---|
Тема | Re: exists |
Дата | |
Msg-id | 3B829A82.4040709@selectacast.net обсуждение исходный текст |
Ответ на | Re: exists (Stephan Szabo <sszabo@megazone23.bigpanda.com>) |
Ответы |
Re: exists
|
Список | pgsql-sql |
Stephan Szabo wrote: > On Tue, 21 Aug 2001, Joseph Shraibman wrote: > > >>Thank you, I was missing the parens. >> >>If I do an explain I see: >> >>-> Index Scan using m_u_and_p_key on m (cost=0.00..3035.22 rows=1363 width=12) >> >> >>even if I put a limit 1 on the select. Why is that? >> > > Is that the inner query (on the exists) or the entire explain? Just the inner query > > I guess it'd be useful to see the whole query and explain and maybe > schema. That's big and complicated. Can you reproduce this somewhere else? Here is the whole explain: Limit (cost=48.39..48.39 rows=1 width=70) -> Sort (cost=48.39..48.39 rows=2 width=70) -> Hash Join (cost=18.46..48.38rows=2 width=70) -> Index Scan using u_p_key on u (cost=0.00..27.66 rows=48 width=28) -> Hash (cost=18.39..18.39 rows=28 width=42) -> Seq Scan on d (cost=0.00..18.39 rows=28width=42) SubPlan -> Nested Loop (cost=0.00..4.04 rows=1 width=20) -> Index Scan using a_pkey on a (cost=0.00..2.01 rows=1 width=4) -> Index Scan using p_pkey onpu (cost=0.00..2.02 rows=1 width=16) -> Index Scan using m_u_and_p_key on m (cost=0.00..3035.22 rows=1363 width=44) I tried to make a simple test case: create table ta (a int); create table tb (c int, b int); insert into ta values (2); insert into ta values (4); insert into ta values (6); insert into ta values (8); insert into ta values (10); insert into tb values (1,1); insert into tb values (2,2); insert into tb values (3,3); insert into tb values (4,4); vacuum analyze; select c, b , exists(select a from ta where a = c) from tb; explain select c, b , exists(select a from ta where a = c) from tb; drop table ta; drop table tb; ... but the data is so small it uses a seq scan: Seq Scan on tb (cost=0.00..1.04 rows=4 width=8) SubPlan -> Seq Scan on ta (cost=0.00..1.06 rows=1 width=4) > > >>Stephan Szabo wrote: >> >>>On Mon, 20 Aug 2001, Joseph Shraibman wrote: >>> >>> >>> >>>>I want to select a boolean if there exists a row in another table that matches this one. >>>>So I did select ..., (select count(*) from table2 where ...) > 0 ... >>>>but that count(*) was taking forever. I know there is a better way to do it, but whenever >>>>I try to use EXISTS I get a syntax error. What is the proper way? >>>> >>>> >>>Hmm, on current sources I can do: >>>select ..., exists (select * from table2 where ...) from table1; >>> >>>I don't know if that's new though... >>> -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
В списке pgsql-sql по дате отправления: