COUNT (*) с GROUP BY в таблице с 30M строками - PullRequest
0 голосов
/ 22 января 2020

Мне нужно извлечь данные из таблиц, содержащих 30 миллионов строк. Функции из таблицы: посещения (основной) survey_id company_id

Мне нужно подсчитать количество посещений для каждого опроса каждой компании, зная, что компания может иметь несколько опросов.

Запрос i сделано было:

SELECT v.survey_id, v.company_id, COUNT(*)
FROM visit AS v
GROUP BY v.survey_id, v.company_id

Основная проблема заключается в том, что это занимает слишком много времени. Есть ли способ оптимизировать запрос? Или это что-то невозможное для SQL или не стоит усилий?

1 Ответ

7 голосов
/ 22 января 2020

Самый прямой способ повысить производительность этого запроса - добавить составной индекс на survey_id, company_id.

Основной недостаток добавления индексов состоит в том, что пишет длиннее. Если это является проблемой (или не стоит улучшать этот запрос), то вы можете периодически предварительно обрабатывать данные в фоновом режиме и где-то хранить счета. Очевидно, вы рискуете получить устаревшие счета.

...