Sql Query Optimization для подсчета и отображения (отличное значение в столбце), сгруппированные по двум другим столбцам

0

Из столбцов A, B и C я подсчитываю различные C, где таблица сгруппирована по A, B. Ниже приведен пример таблицы:

Изображение 174551

и вывод должен выглядеть примерно так:

Изображение 174551

Я запускаю phpMyAdmin на своем локальном компьютере, используя wamp-сервер для тестирования. Моя база данных имеет 500000 строк. Я использовал следующий запрос, и мой запрос занял более 180 секунд.

select A, B, count(distinct C)
from table
group by A, B
order by count(DISTINCT C) desc

Есть ли оптимальный запрос, который я могу использовать для того же результата, который даст мне меньше времени выполнения? Или это потому, что в моей таблице много данных?

  • 0
    вам просто нужно проиндексировать столбцы, они используются для ускорения запросов и будут использоваться поисковой системой базы данных для очень быстрого поиска записей. Смотрите это: dev.mysql.com/doc/refman/5.5/en/column-indexes.html
  • 1
    Поскольку вы новичок здесь, не делайте снимки экрана, помещайте значения в виде разделенных запятыми или символами канала в таблице. Ссылка sqlfiddle.com
Показать ещё 2 комментария
Теги:
query-optimization

1 ответ

1

Для повышения производительности вам необходимо добавить составной индекс (A, B, C) на вашу таблицу.

ALTER TABLE your_table_name 
ADD INDEX(A,B,C);
  • 0
    Использует ли MySQL этот индекс для своего запроса?
  • 0
    @GordonLinoff - я ожидал бы этого по двум причинам: 1. это оптимально для GROUP BY , и 2. это «покрытие». Тем не менее, сканирование индекса по 500 тыс. Строк не может быть намного быстрее, чем сканирование таблицы с таким же количеством строк.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню