PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres:Защо производителността е толкова лоша на подселекти с Offset/Limit

Мисля, че съединението, изразено в клаузата SELECT, се изпълнява дори за 100 000 реда, които не включвате в крайния набор от данни.

Какво ще кажете за това:

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

Ако не успеете, опитайте общ израз на таблица:

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. Как да използвам подзаявка в django?

  2. Рекурсивна заявка със сума в Postgres

  3. pq:функцията unnest(unknown) не е уникална

  4. Най-бърза проверка дали ред съществува в PostgreSQL

  5. Броят на редовете за заявки, разделени по периоди от време