Как сделать мой MySQL SUM () запрос быстрее - PullRequest
2 голосов
/ 01 июля 2011

У меня около 1 миллиона строк в таблице users и столбцы A AA B BB C CC D DD E EE F FF в качестве примера для подсчета int значений 0 & 1

SELECT 
CityCode,SUM(A),SUM(B),SUM(C),SUM(D),SUM(E),SUM(F),SUM(AA),SUM(BB),SUM(CC),SUM(DD),SUM(EE),SUM(FF)
FROM users 
GROUP BY CityCode

Результат 8 rows in set (24.49 sec).

Как сделать мое заявление быстрее?

Ответы [ 5 ]

2 голосов
/ 01 июля 2011

Используйте объясните , чтобы узнать план исполнения вашего запроса.

Создать хотя бы один или несколько индексов.Если возможно, сделайте первичный ключ CityCode

Попробуйте этот

SELECT CityCode,SUM(A),SUM(B),SUM(C),SUM(D), SUM(E),SUM(F),SUM(AA),SUM(BB),SUM(CC),SUM(DD),SUM(EE),SUM(FF)
FROM users 
GROUP BY CityCode,A,B,C,D,E,F,AA,BB,CC,DD,EE,FF
2 голосов
/ 01 июля 2011

Я полагаю, что это не из-за SUM (), попробуйте сказать, select CityCode from users group by CityCode; это должно занять около того же времени ...

2 голосов
/ 01 июля 2011

Создать индекс для столбца CityCode.

1 голос
/ 01 июля 2011
  • Используйте лучшее оборудование
  • увеличить размер кэширования - если вы используете движок InnoDB, то увеличьте значение innodb_buffer_pool_size
  • Рефакторинг вашего запроса для ограничения количества пользователей (если, конечно, бизнес-логика это позволяет)
0 голосов
/ 01 июля 2011

У вас нет предложения WHERE, что означает, что запрос должен сканировать всю таблицу. Это замедлит работу на большом столе.

Вам следует подумать о том, как часто вам нужно это делать, и какова его медлительность. Некоторые предложения:

  • Ничего не меняйте - если это не имеет значения
  • Иметь таблицу, которая содержит те же данные, что и «пользователи», но без каких-либо других столбцов, которые вас не интересуют. Он все еще будет медленным, но не , как медленным, особенно если есть большие
  • (InnoDB) использует CityCode в качестве первой части первичного ключа для таблицы «пользователи», таким образом он может выполнять сканирование PK и избегать какой-либо сортировки (все еще может быть слишком медленной)
  • Создание и ведение некоторой сводной таблицы, но вам нужно будет обновлять ее каждый раз, когда пользователь изменяет (или допускает устаревшие данные)

Но будьте уверены, что эта оптимизация абсолютно необходима.

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