PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres:Dlaczego wydajność jest tak słaba w przypadku podselekcji z przesunięciem/limitem?

Myślę, że złączenie wyrażone w klauzuli SELECT jest wykonywane nawet dla 100000 wierszy, których nie uwzględniasz w końcowym zestawie danych.

A co powiesz na to:

SELECT s2.user_id,
(SELECT address_id FROM address a WHERE a.user_id = s2.user_id ORDER BY address_id OFFSET 0 LIMIT 1) AS a_id
FROM (select *
      from   subscribers s
      ORDER BY s.user_id
      OFFSET 100000 LIMIT 200) s2

Jeśli to się nie uda, wypróbuj popularne wyrażenie tabelowe:

With s2 as (
  select *
  from   subscribers s
  ORDER BY s.user_id
  OFFSET 100000 LIMIT 200)
SELECT s2.user_id,
(SELECT address_id FROM address a WHERE a.user_id = s2.user_id ORDER BY address_id OFFSET 0 LIMIT 1) AS a_id
FROM s2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa IsFinite() w PostgreSQL

  2. PostgreSQL:Dlaczego to zapytanie nie używa mojego indeksu?

  3. Jak przenieść produkcyjną bazę danych do pomostu w Heroku za pomocą pgbackups? Otrzymuję błąd

  4. Jak wypełnić lukę w zabezpieczeniach PostgreSQL

  5. Oddzielne bazy danych pgAdmin i cmd psql