sql >> Database >  >> RDS >> PostgreSQL

Het wijzigen van ORDER BY van id naar een andere geïndexeerde kolom (met lage LIMIT) heeft enorme kosten

Het bleek een indexprobleem te zijn. Het NULLS-gedrag van de zoekopdracht kwam niet overeen met de index.

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

oplossingen

Als u NULLS opgeeft in uw index of zoekopdracht, zorg er dan voor dat ze coherent met elkaar zijn.

dat wil zeggen:ASC NULLS LAST is coherent met ASC NULLS LAST of DESC NULLS FIRST .

NULLEN LAATSTE

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

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

NULLEN EERST

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;

NIET NUL

Als uw kolom NIET NULL is, hoeft u zich geen zorgen te maken over NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;


  1. herschrijf URL's voor productnaam

  2. WHERE CURRENT OF in PL/SQL

  3. Oracle Database, SQL Update-instructie werkt niet (OLEDB)

  4. Hoe de n'th hoogste waarde van een kolom te vinden?