Size: a a a

pgsql – PostgreSQL

2020 August 20

s

suchimauz in pgsql – PostgreSQL
А в exists не сабселект?
источник

kp

kirill pekov in pgsql – PostgreSQL
suchimauz
Select A.*
From a
Left join b
On a.id = b.some_id
Where b.id is null

🤣
Сейчас главное задачу закрыть, но потом за доплату будут просить оптимизации
источник

N

Nikolay in pgsql – PostgreSQL
suchimauz
Select A.*
From a
Left join b
On a.id = b.some_id
Where b.id is null

🤣
Точно. Тоже вариант
источник

s

suchimauz in pgsql – PostgreSQL
Вот решение без сабселекта)
источник

s

suchimauz in pgsql – PostgreSQL
Очень плохое, это сек скан по всему, но вариант
источник

N

Nikolay in pgsql – PostgreSQL
точно плохое? это в плане должно вылгядеть как anti-join, начиная то ли с 8.3, то ли 8.4 у постгреса есть нода в планах такая
источник

s

suchimauz in pgsql – PostgreSQL
Через exists с сабселектом быстрее будет
источник

2_

2flower _ in pgsql – PostgreSQL
suchimauz
А в exists не сабселект?
там автор в 3х соснах путается, я не уверен, что он понимает что написал. :)
источник

KK

Konstantin K in pgsql – PostgreSQL
exists самый быстрый способ
источник

s

suchimauz in pgsql – PostgreSQL
Konstantin K
exists самый быстрый способ
+
источник

KK

Konstantin K in pgsql – PostgreSQL
по крайней мере, в оракле Том Кайт его таким назвал)
источник

s

suchimauz in pgsql – PostgreSQL
2flower _
там автор в 3х соснах путается, я не уверен, что он понимает что написал. :)
Тоже очень странная задача) решать без сабселекта задачу, которая решается им и быстрее намного
источник

s

suchimauz in pgsql – PostgreSQL
Konstantin K
по крайней мере, в оракле Том Кайт его таким назвал)
В постгре та же история, то что я написал это сек скан в любом случае
источник

N

Nikolay in pgsql – PostgreSQL
test=# explain select from j1 left join j2 using (i) where j2.i is null and j1.i < 100;
                                  QUERY PLAN
--------------------------------------------------------------------------------
Nested Loop Anti Join  (cost=0.85..851.60 rows=51 width=0)
  ->  Index Only Scan using j1_pkey on j1  (cost=0.42..10.21 rows=102 width=4)
        Index Cond: (i < 100)
  ->  Index Only Scan using j2_pkey on j2  (cost=0.42..8.24 rows=1 width=4)
        Index Cond: (i = j1.i)
(5 rows)
источник

s

suchimauz in pgsql – PostgreSQL
Nikolay
test=# explain select from j1 left join j2 using (i) where j2.i is null and j1.i < 100;
                                  QUERY PLAN
--------------------------------------------------------------------------------
Nested Loop Anti Join  (cost=0.85..851.60 rows=51 width=0)
  ->  Index Only Scan using j1_pkey on j1  (cost=0.42..10.21 rows=102 width=4)
        Index Cond: (i < 100)
  ->  Index Only Scan using j2_pkey on j2  (cost=0.42..8.24 rows=1 width=4)
        Index Cond: (i = j1.i)
(5 rows)
j1.i < 100 убери)
источник

N

Nikolay in pgsql – PostgreSQL
test=# explain select from j1 where not exists (select from j2 where j2.i = j1.i) and j1.i < 100;
                                  QUERY PLAN
--------------------------------------------------------------------------------
Nested Loop Anti Join  (cost=0.85..851.60 rows=51 width=0)
  ->  Index Only Scan using j1_pkey on j1  (cost=0.42..10.21 rows=102 width=4)
        Index Cond: (i < 100)
  ->  Index Only Scan using j2_pkey on j2  (cost=0.42..8.24 rows=1 width=4)
        Index Cond: (i = j1.i)
(5 rows)
источник

N

Nikolay in pgsql – PostgreSQL
зачем убирать? мы в нормальных условиях не хотим бегать по всем таблицам, батчи, паджинация и тд
источник

N

Nikolay in pgsql – PostgreSQL
то что select * from table будет seqscan -- ну это понятно 🙂
источник

s

suchimauz in pgsql – PostgreSQL
Ну в таком случае он конечно по индексу пойдет)
источник

2_

2flower _ in pgsql – PostgreSQL
<100 это читерство
источник