PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SELECT DISTINCT jest wolniejszy niż oczekiwano na moim stole w PostgreSQL

Chociaż w Postgresie nie ma jeszcze skanowania z pomijaniem indeksu, emuluj go:

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;

Z indeksem na (product_id) i tylko 40 unikalnych identyfikatorów produktów w tabeli to powinno być szybko . Przez duże F .
Indeks PK w (product_id, trade_id) to też jest dobre!

Z bardzo małą liczbą wierszy na product_id (przeciwieństwo dystrybucji danych), DISTINCT / DISTINCT ON byłby tak szybki lub szybszy.

Trwają prace nad wdrożeniem skanowania z pomijaniem indeksu.
Patrz:

  • Wybrać pierwszy wiersz w każdej grupie GROUP BY?
  • Zoptymalizuj zapytanie GROUP BY, aby pobrać ostatni wiersz na użytkownika
  • Czy indeks złożony jest również odpowiedni dla zapytań w pierwszym polu?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablice liczb całkowitych Postgres jako parametry?

  2. Wyjaśnienie polecenia PostgreSQL VALUES

  3. Wyodrębnij miesiąc z daty w PostgreSQL

  4. 2 sposoby zwracania wierszy zawierających tylko znaki alfanumeryczne w PostgreSQL

  5. Uruchamianie PostgreSQL przy użyciu Amazon RDS