Postgresql запрос на выборку занимает много времени

Мой ответ не использует коллекции numpy или python.

Один тривиальный способ найти элементы:

a = [-2, 1, 5, 3, 8, 5, 6]
b = [1, 2, 5]
c = [i for i in a if i in b]

Недостаток: этот метод может не быть работайте для больших списков. Использование numpy рекомендуется для больших списков.

0
задан barteloma 6 March 2019 в 11:43
поделиться

1 ответ

Существует несколько факторов, играющих большую роль в решении PostgreSQL о том, как выполнять count(), но, во-первых, столбец, который вы используете внутри функции count, не имеет значения. На самом деле, если вам не нужен счет DISTINCT, придерживайтесь count(*).

Вы можете попробовать следующее, чтобы запустить сканирование только по индексу:

SELECT count(*) FROM (SELECT event_id FROM events) t;

... если это все еще приводит к последовательному сканированию, то, скорее всего, индекс не намного меньше, чем сама таблица , Чтобы по-прежнему видеть, как будет выполняться сканирование только по индексу, вы можете применить его с помощью:

SELECT count(*) FROM (SELECT event_id FROM events ORDER BY 1) t;

ЕСЛИ это не намного быстрее, вам также следует рассмотреть возможность обновления PostgreSQL до версии не ниже 9.6, которая вводит параллельных последовательных сканирований , чтобы ускорить эти вещи.

Кроме того, вы можете добиться значительного ускорения, выбирая из множества методов, чтобы обеспечить счет, который в значительной степени зависит от вашего варианта использования и ваших требований:

И последнее, но не менее важное: всегда предоставляйте вывод расширенного объяснения в виде уже рекомендованного @a_horse_with_no_name, например:

EXPLAIN (ANALYZE, BUFFERS) SELECT count(event_id) FROM events;
0
ответ дан Ancoron 6 March 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: