PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Alterar ORDER BY de id para outra coluna indexada (com LIMIT baixo) tem um custo enorme


Acabou sendo um problema de índice. O comportamento NULLS da consulta não era coerente com o í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

soluções


Se você especificar NULLS em seu índice ou consulta, verifique se eles são coerentes entre si.

ou seja:ASC NULLS LAST é coerente com ASC NULLS LAST ou DESC NULLS FIRST .

ÚLTIMO NULOS

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

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

NULOS PRIMEIRO

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;

NÃO NULO


Se sua coluna NÃO for NULL, não se preocupe com NULL.
CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;