Я делаю "избранную сумму (нечто) от панели" запрос на базе данных MySQL, это подводит итог 7.3-миллиметровых записей и занимает приблизительно 22 секунды на выполнение. Существует ли прием к ускорению сумм в MySQL?
Нет, вы не можете ускорить себя функцию. Проблема здесь действительно, что вы выбираете 7,3 миллиона записей. MySQL должен отсканировать всю таблицу, а 7,3 млн. Довольно большое число. Я впечатлен, что это заканчивает это быстро, на самом деле.
Стратегия, которую вы можете использовать, будет сломать ваши данные в более мелкие подмножества (возможно, по дате? Месяц?) И поддерживать общую сумму для старых данных, которые не будут измениться. Вы можете периодически обновлять сумму, и общее значение можно рассчитать, добавив сумму и любые новые данные, которые были добавлены с тех пор, что будет гораздо меньшим количеством строк.
Здесь две вещи:
1) Вы не должны делать сумму на 7,3 млн записей на регулярной основе - ввести промежуточные таблицы, обслуживающие бизнес-потребности (днем, месяц, год, отдел и т. Д. ) И заполните их на запланированной основе, возможно, повторно используйте эти таблицы вместо оригинальной таблицы «RAW» (например, выберите суммарное значение для каждого дня, когда вам нужно несколько дней, и т. Д.)
2) Проверьте настройки транзакции
http : //dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-rad
Нет, не совсем. Ему всегда придется перечислять все строки в таблице.
Можно создать дополнительную таблицу и обновлять там сумму на каждой вставке, обновлении, удалении?
.Вы, вероятно, можете попробовать добавить индекс в поле bar.foo. Индекс будет содержать все значения столбцов бара, но он меньше, поэтому сканировать его быстрее, чем исходную таблицу Фу, особенно если в Фу много других столбцов.
Если ваш запрос действительно настолько прост, то нет... но если вы используете более сложный запрос (и сократили его здесь), вы можете (вероятно) - например, использовать лучшие объединения...
Включите QUERY CACHE в mysql. По умолчанию кеширование отключено. Вам необходимо установить файл mysql ini.
-- hint mysql server about caching
SELECT SQL_CACHE sum(foo) FROM bar;
Оптимизатор MySQL может вернуть кэш, если в таблицу не было внесено никаких изменений.
Подробнее читайте здесь: http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/