sql >> Databasteknik >  >> RDS >> PostgreSQL

Att ändra ORDER BY från id till en annan indexerad kolumn (med låg LIMIT) har en enorm kostnad

Det visade sig vara en indexfråga. NULLS-beteendet för frågan stämde inte överens med indexet.

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ösningar

Om du anger NULLS i ditt index eller din fråga, se till att de stämmer överens med varandra.

dvs:ASC NULLS LAST är koherent med ASC NULLS LAST eller DESC NULLS FIRST .

NULLER SIST

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

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

NULLER FÖRST

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;

INTE NULL

Om din kolumn INTE är NULL, bry dig inte om NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;


  1. Livförsäkringsdatamodell

  2. ORACLE TRIGGER INSERT INTO ... (VÄLJ * ...)

  3. MySQL lösenordsfunktion

  4. Vilket är snabbast i PHP-MySQL eller MySQLi?