sql >> Database >  >> RDS >> PostgreSQL

SELECT DISTINCT is langzamer dan verwacht op mijn tafel in PostgreSQL

Hoewel er nog geen scan voor het overslaan van de index in Postgres is, kunt u deze emuleren:

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;

Met een index op (product_id) en slechts 40 unieke product-ID's in de tabel dit moet Snel zijn . Met hoofdletter F .
De PK-index op (product_id, trade_id) is er ook goed voor!

Met slechts zeer weinig rijen per product_id (het tegenovergestelde van uw gegevensdistributie), DISTINCT / DISTINCT ON zou even snel of sneller zijn.

Er wordt gewerkt aan het implementeren van scans voor het overslaan van indexen.
Zie:

  • Selecteer de eerste rij in elke GROUP BY-groep?
  • Optimaliseer de GROUP BY-query om de laatste rij per gebruiker op te halen
  • Is een samengestelde index ook goed voor zoekopdrachten op het eerste veld?



  1. ScaleGrid DBaaS genomineerd voor de Cloud Excellence Awards 2018

  2. postgres hernoemen database werkt niet

  3. Hoe MySQL-database te herstellen van .myd-, .myi-, .frm-bestanden

  4. SQL Server-trigger:inzicht en alternatieven