Действительно ли возможно ускорить сумму () в MySQL?

Я делаю "избранную сумму (нечто) от панели" запрос на базе данных MySQL, это подводит итог 7.3-миллиметровых записей и занимает приблизительно 22 секунды на выполнение. Существует ли прием к ускорению сумм в MySQL?

24
задан Teflon Ted 1 February 2010 в 16:55
поделиться

6 ответов

Нет, вы не можете ускорить себя функцию. Проблема здесь действительно, что вы выбираете 7,3 миллиона записей. MySQL должен отсканировать всю таблицу, а 7,3 млн. Довольно большое число. Я впечатлен, что это заканчивает это быстро, на самом деле.

Стратегия, которую вы можете использовать, будет сломать ваши данные в более мелкие подмножества (возможно, по дате? Месяц?) И поддерживать общую сумму для старых данных, которые не будут измениться. Вы можете периодически обновлять сумму, и общее значение можно рассчитать, добавив сумму и любые новые данные, которые были добавлены с тех пор, что будет гораздо меньшим количеством строк.

36
ответ дан 28 November 2019 в 22:48
поделиться

Здесь две вещи:

1) Вы не должны делать сумму на 7,3 млн записей на регулярной основе - ввести промежуточные таблицы, обслуживающие бизнес-потребности (днем, месяц, год, отдел и т. Д. ) И заполните их на запланированной основе, возможно, повторно используйте эти таблицы вместо оригинальной таблицы «RAW» (например, выберите суммарное значение для каждого дня, когда вам нужно несколько дней, и т. Д.)

2) Проверьте настройки транзакции

http : //dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-rad

8
ответ дан 28 November 2019 в 22:48
поделиться

Нет, не совсем. Ему всегда придется перечислять все строки в таблице.

Можно создать дополнительную таблицу и обновлять там сумму на каждой вставке, обновлении, удалении?

.
3
ответ дан 28 November 2019 в 22:48
поделиться

Вы, вероятно, можете попробовать добавить индекс в поле bar.foo. Индекс будет содержать все значения столбцов бара, но он меньше, поэтому сканировать его быстрее, чем исходную таблицу Фу, особенно если в Фу много других столбцов.

1
ответ дан 28 November 2019 в 22:48
поделиться

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

0
ответ дан 28 November 2019 в 22:48
поделиться

Включите 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/

11
ответ дан 28 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: