sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres:Hvorfor er ydeevnen så dårlig på subselects med Offset/Limit

Jeg tror, ​​at joinforbindelsen, der er udtrykt i SELECT-sætningen, udføres selv for de 100.000 rækker, du ikke inkluderer i det endelige datasæt.

Hvad med dette:

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

Ellers kan du prøve et almindeligt tabeludtryk:

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. SQL Server:hvordan man vælger et fast antal rækker (vælg hver x-te værdi)

  2. Er det muligt at sende objekter til PL SQL-pakkeproceduren som parametre?

  3. ORA-01008:ikke alle variable er bundet, når de alle er bundet

  4. Hvordan får jeg dvaletilstand for at generere Oracles FOR UPDATE WAIT 10-syntaks