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

Thay đổi ORDER BY từ id sang một cột được lập chỉ mục khác (với LIMIT thấp) có chi phí rất lớn

Hóa ra là một vấn đề về chỉ mục. Hành vi NULLS của truy vấn không nhất quán với chỉ mục.

CREATE INDEX message_created_at_idx on message (created_at DESC NULLS LAST);

... ORDER BY message.created_at DESC; -- defaults to NULLS FIRST when DESC

giải pháp

Nếu bạn chỉ định NULLS trong chỉ mục hoặc truy vấn của mình, hãy đảm bảo rằng chúng nhất quán với nhau.

tức là:ASC NULLS LAST nhất quán với ASC NULLS LAST hoặc DESC NULLS FIRST .

CUỐI CÙNG

CREATE INDEX message_created_at_idx on message (created_at DESC NULLS LAST);

... ORDER BY messsage.created_at DESC NULLS LAST;

LẦN ĐẦU TIÊN

CREATE INDEX message_created_at_idx on message (created_at DESC); -- defaults to NULLS FIRST when DESC

... ORDER BY messsage.created_at DESC -- defaults to NULLS FIRST when DESC;

KHÔNG ĐẦY ĐỦ

Nếu cột của bạn KHÔNG ĐẦY ĐỦ, đừng bận tâm với NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật một cột của một bảng với một cột của một bảng khác trong PostgreSQL

  2. PostgreSQL GROUP_CONCAT () Tương đương

  3. Truy vấn đệ quy trong PostgreSQL. LỰA CHỌN *

  4. Cách sử dụng trình kích hoạt PostgreSQL?

  5. Tên cột và kiểu dữ liệu cho các dạng xem cụ thể hóa trong PostgreSQL?