PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres:Tại sao hiệu suất quá tệ trên các lựa chọn con có Offset / Limit

Tôi nghĩ rằng phép nối được thể hiện trong mệnh đề SELECT đang được thực thi ngay cả đối với 100000 hàng mà bạn không đưa vào tập dữ liệu cuối cùng.

Làm thế nào về điều này:

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

Nếu không, hãy thử một biểu thức bảng phổ biến:

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. 9.6 Giải đấu bản vá đáng sợ nhất

  2. Hibernate Tools không lấy được thông tin chỉ mục từ bảng Postgres

  3. Kết hợp LOOP vào SQL

  4. Không tìm thấy lớp đang tải JDBC org.postgresql.Driver

  5. Nguyên nhân nào gây ra lỗi Thêm không được nhận dạng ... khi chạy Postgresql 11 trên máy Windows?