PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SELECT DISTINCT е по-бавен от очакваното в моята таблица в PostgreSQL

Въпреки че все още няма сканиране с пропускане на индекс в Postgres, емулирайте го:

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;

С индекс на (product_id) и само 40 уникални идентификатора на продукти в таблицата това трябва да е Бързо . С главно F .
Индексът на PK на (product_id, trade_id) е добре и за него!

Само с много няколко реда на product_id (обратно на разпределението на вашите данни), DISTINCT / DISTINCT ON ще бъде толкова бързо или по-бързо.

Работата по внедряване на сканиране при пропускане на индекси продължава.
Вижте:

  • Изберете ли първия ред във всяка група GROUP BY?
  • Оптимизирайте заявката GROUP BY, за да извлечете последния ред на потребител
  • Съставният индекс добър ли е и за заявки в първото поле?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Пълно текстово търсене - Как да търсите частични думи?

  2. Инсталиране на postgresql с NSIS

  3. Как да настроите изходния формат на интервала в PostgreSQL

  4. Преглед на различните методи за сканиране в PostgreSQL

  5. django.db.utils.OperationalError Не можа да се свърже със сървъра