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

Промяната на ORDER BY от id към друга индексирана колона (с нисък LIMIT) има огромна цена

Оказа се проблем с индекса. Поведението на NULLS на заявката не беше съгласувано с индекса.

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

решения

Ако посочите NULLS във вашия индекс или заявка, уверете се, че те са съгласувани един с друг.

т.е.:ASC NULLS LAST е съгласувано с ASC NULLS LAST или DESC NULLS FIRST .

ПОСЛЕДНИ НУЛИ

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

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

ПЪРВИ НУЛИ

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;

НЕ NULL

Ако колоната ви НЕ е NULL, не се занимавайте с 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. Как да извлека id на вмъкнат ред, когато използвам upsert с WITH cluase в Posgres 9.5?

  2. Последователност в Oracle/PostgreSQL без ID в израза за вмъкване

  3. Комбинирайте две колони и добавете в една нова колона

  4. Вземете клеймо за време от свързване на колони за ден и час

  5. Postgres:командата vacuum не почиства мъртвите кортежи