sql >> Databáze >  >> RDS >> PostgreSQL

Změna ORDER BY z id na jiný indexovaný sloupec (s nízkým LIMIT) má obrovské náklady

Ukázalo se, že jde o problém s indexem. Chování NULLS dotazu nebylo v souladu s indexem.

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

řešení

Pokud ve svém indexu nebo dotazu zadáte NULLS, ujistěte se, že jsou vzájemně koherentní.

tj.:ASC NULLS LAST je koherentní s ASC NULLS LAST nebo DESC NULLS FIRST .

POSLEDNÍ NULOVÉ

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

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

NULOVÉ PRVNÍ

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;

NENI NULL

Pokud váš sloupec NENÍ NULL, nezatěžujte se s NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;


  1. Spojte tabulky s hodnotami čárkami

  2. Ruční dešifrování Ebean

  3. IS NOT NULL test pro záznam nevrací hodnotu TRUE, když je nastavena proměnná

  4. Zápis souboru pomocí více vláken