sql >> Databáze >  >> RDS >> PostgreSQL

SELECT DISTINCT je na mém stole v PostgreSQL pomalejší, než se očekávalo

I když v Postgresu zatím není žádné skenování přeskočením indexu, emulujte jej:

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;

S indexem na (product_id) a pouze 40 jedinečných ID produktů v tabulce toto by mělo být Rychlé . S velkým F .
Index PK na (product_id, trade_id) je pro to také dobré!

Pouze velmi málo řádků na product_id (opak vaší distribuce dat), DISTINCT / DISTINCT ON bude stejně rychlé nebo rychlejší.

Práce na implementaci skenování přeskočení indexu pokračují.
Viz:

  • Vybrat první řádek v každé skupině GROUP BY?
  • Optimalizujte dotaz GROUP BY pro načtení posledního řádku na uživatele
  • Je složený index vhodný také pro dotazy na první pole?



  1. Závažná chyba:Nezachycená chyba:Volání nedefinované funkce mysql_connect()

  2. instalace postgres selhala inicializace databázového clusteru ( Postgresql verze 9.4.4 )

  3. Jak vyřešit ORA-29280:neplatná cesta k adresáři

  4. Jak připojit aplikaci C# Windows mobile 6.5 k databázi Postgres?