sql >> Database >  >> RDS >> PostgreSQL

Postgres:Waarom zijn de prestaties zo slecht bij subselecties met Offset/Limit

Ik denk dat de join die in de SELECT-component wordt uitgedrukt, zelfs wordt uitgevoerd voor de 100.000 rijen die je niet opneemt in de uiteindelijke dataset.

Wat dacht je hiervan:

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

Als dat niet lukt, probeer dan een algemene tabeluitdrukking:

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. Een SQL-query starten met een klik op de knop?

  2. Hoe gegevens uit meerdere tabellen op de juiste manier te selecteren met behulp van joins/subquery? (PHP-MySQL)

  3. Als ik verbinding maak met mijn externe SQL-server, krijg ik toegang geweigerd voor gebruiker [email protected] (Wachtwoord gebruiken:Ja)

  4. Geparametriseerde query:controleer of het veld in een reeks waarden in de SELECT-instructie staat