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

SELECT DISTINCT è più lento del previsto sulla mia tabella in PostgreSQL

Anche se in Postgres non è ancora presente la scansione di salto dell'indice, emulala:

WITH RECURSIVE cte AS (
   (   -- parentheses required
   SELECT product_id
   FROM   tickers
   ORDER  BY 1
   LIMIT  1
   )
   UNION ALL
   SELECT l.*
   FROM   cte c
   CROSS  JOIN LATERAL (
      SELECT product_id
      FROM   tickers t
      WHERE  t.product_id > c.product_id  -- lateral reference
      ORDER  BY 1
      LIMIT  1
      ) l
   )
TABLE  cte;

Con un indice su (product_id) e solo 40 ID prodotto univoci nella tabella dovrebbe essere Veloce . Con F maiuscola .
L'indice PK su (product_id, trade_id) va bene anche per questo!

Con solo pochissime righe per product_id (l'opposto della tua distribuzione dei dati), DISTINCT / DISTINCT ON sarebbe altrettanto veloce o più veloce.

Il lavoro per implementare le scansioni di salto dell'indice è in corso.
Vedi:

  • Seleziona la prima riga in ogni gruppo GROUP BY?
  • Ottimizza la query GROUP BY per recuperare l'ultima riga per utente
  • Un indice composito va bene anche per le query sul primo campo?