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

SELECT DISTINCT er langsommere end forventet på mit bord i PostgreSQL

Selvom der ikke er nogen indeksspringsscanning i Postgres endnu, emuler det:

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;

Med et indeks på (product_id) og kun 40 unikke produkt-id'er i tabellen dette skal være hurtigt . Med stort F .
PK-indekset på (product_id, trade_id) er også god til det!

Med kun meget få rækker pr. product_id (det modsatte af din datadistribution), DISTINCT / DISTINCT ON ville være lige så hurtig eller hurtigere.

Arbejdet med at implementere indeksspringsscanninger er i gang.
Se:

  • Vælg første række i hver GROUP BY-gruppe?
  • Optimer GROUP BY-forespørgsel for at hente seneste række pr. bruger
  • Er et sammensat indeks også godt til forespørgsler i det første felt?



  1. Postgres-fejl under opdatering af kolonnedata

  2. Oracle SQL - REGEXP_LIKE indeholder andre tegn end a-z eller A-Z

  3. Kompression og dens virkninger på ydeevne

  4. Har du lov til at bruge tal som tabelnavne i MySQL?