Оптимизировать Mysql Query Имея количество и группировать по - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть простая таблица MySQL, которая содержит около 12 миллионов записей.

CREATE TABLE IF NOT EXISTS md5_table(
    md5 char(32),
    category INTEGER NOT NULL,
    PRIMARY KEY (md5),
    INDEX INDEX_MD5(md5)
 );

Я хочу сосчитать категорию из приведенной выше таблицы.

SELECT category, count(category) FROM md5_table
GROUP BY category;

Мы часто используем этот запрос, и его выполнение заняло около 10 секунд.Я хочу уменьшить его до миллисекунд.

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете попробовать это.Предположим, у вас есть category таблица.Затем попробуйте:

SELECT c.category,
       (SELECT COUNT(*)
        FROM md5_table t
        WHERE t.category = c.category
       ) as cnt
FROM category c;

Для этого требуется индекс md5_table(category).

. Я считаю, что MySQL довольно привередлив в использовании индексов для запросов агрегации.Вы можете обнаружить, что этот метод ускоряет ваш конкретный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...