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 по дате отправления:

Предыдущее
От: Joseph Shraibman
Дата:
Сообщение: Re: exists
Следующее
От: Stephan Szabo
Дата:
Сообщение: Re: exists