PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La modifica di ORDER BY da id a un'altra colonna indicizzata (con LIMIT basso) ha un costo enorme

Si è rivelato essere un problema di indice. Il comportamento NULLS della query non era coerente con l'indice.

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

soluzioni

Se specifichi NULLS nell'indice o nella query, assicurati che siano coerenti tra loro.

cioè:ASC NULLS LAST è coerente con ASC NULLS LAST o DESC NULLS FIRST .

ULTIMI NULL

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

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

PRIMA NULLA

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;

NON NULLO

Se la tua colonna NON è NULL, non preoccuparti di NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;