PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmiana ORDER BY z id na inną indeksowaną kolumnę (z niskim LIMIT) ma ogromny koszt

Okazało się, że to kwestia indeksu. Zachowanie zapytania NULLS nie było spójne z indeksem.

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

rozwiązania

Jeśli określisz wartości NULL w indeksie lub zapytaniu, upewnij się, że są one ze sobą spójne.

np:ASC NULLS LAST jest spójny z ASC NULLS LAST lub DESC NULLS FIRST .

NULL OSTATNIE

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

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

Najpierw NULL

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;

NIE NULL

Jeśli Twoja kolumna NIE JEST NULL, nie przejmuj się 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. Czy WIDOKI PostgreSQL są tworzone od nowa za każdym razem, gdy są odpytywane?

  2. Niestandardowy numer tygodnia PostgreSQL - pierwszy tydzień zawierający 1 lutego

  3. Dodaj ograniczenie, aby kolumna była unikalna dla grupy wierszy

  4. Wymień wszystkie sekwencje w Postgres db 8.1 z SQL

  5. Utwórz tablicę dla wartości z listy kolumn wyodrębnionych w Postgres