sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar ORDER BY de id a otra columna indexada (con LÍMITE bajo) tiene un costo enorme

Resultó ser un problema de índice. El comportamiento NULLS de la consulta no era coherente con el índice.

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

soluciones

Si especifica NULLS en su índice o consulta, asegúrese de que sean coherentes entre sí.

es decir:ASC NULLS LAST es coherente con ASC NULLS LAST o DESC NULLS FIRST .

ÚLTIMO NULO

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

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

NULOS PRIMERO

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;

NO NULO

Si su columna NO es NULL, no se moleste con NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;