PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Das Ändern von ORDER BY von id zu einer anderen indizierten Spalte (mit niedrigem LIMIT) ist mit enormen Kosten verbunden

Es stellte sich heraus, dass es sich um ein Indexproblem handelte. Das NULLS-Verhalten der Abfrage stimmte nicht mit dem Index überein.

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

Lösungen

Wenn Sie NULLEN in Ihrem Index oder Ihrer Abfrage angeben, stellen Sie sicher, dass sie miteinander kohärent sind.

dh:ASC NULLS LAST ist kohärent mit ASC NULLS LAST oder DESC NULLS FIRST .

NULLEN ZULETZT

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

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

NULLEN ZUERST

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;

NICHT NULL

Wenn Ihre Spalte NICHT NULL ist, kümmern Sie sich nicht um NULLEN.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;