sql >> Database teknologi >  >> RDS >> PostgreSQL

Ændring af ORDER BY fra id til en anden indekseret kolonne (med lav LIMIT) har en enorm omkostning

Det viste sig at være et indeksproblem. NULLS-adfærden for forespørgslen var ikke i overensstemmelse med indekset.

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øsninger

Hvis du angiver NULLS i dit indeks eller din forespørgsel, skal du sørge for, at de er sammenhængende med hinanden.

dvs.:ASC NULLS LAST er kohærent med ASC NULLS LAST eller DESC NULLS FIRST .

NULLER SIDER

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;

IKKE NULL

Hvis din kolonne IKKE er NULL, skal du ikke bekymre dig om NULLS.

CREATE INDEX message_created_at_idx on message (created_at DESC);

... ORDER BY messsage.created_at DESC;


  1. PostgreSQL Connection Pooling:Del 4 – PgBouncer vs. Pgpool-II

  2. SQL Server dynamisk pivot med flere kolonner

  3. Nye Azure SQL Database Standard Tier Sizes

  4. PL/SQL-blokeringsproblem:Ingen data fundet fejl