sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres:Varför är prestandan så dålig på subselects med Offset/Limit

Jag tror att kopplingen som uttrycks i SELECT-satsen exekveras även för de 100 000 raderna som du inte inkluderar i den slutliga datamängden.

Vad sägs om det här:

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

Om det misslyckas, prova ett vanligt tabelluttryck:

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. SET-operatorer i SQL

  2. konvertera mysql tidsstämpel till faktiskt datum och tid?

  3. Ogiltiga nummer

  4. Automatisera Databas Test Restore i SQL Server