focuspro
@focuspro

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

Есть 10 000 лотов с аукциона с ценами, вывожу минимальную, максимальную, среднюю цену
Запрос обрабатывается 13 секунд, чем больше лотов, тем больше время запроса
SELECT MIN(cast(pm.meta_value AS SIGNED)) AS min_price, MAX(cast(pm.meta_value AS SIGNED)) AS max_price
FROM wp_postmeta pm
WHERE 1=1
AND pm.meta_key = 'info_final_bid'
AND pm.meta_value != ''
AND pm.meta_value != 0
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 3
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Сконвертировать поле meta_value в integer и проиндексировать
Ответ написан
BorLaze
@BorLaze
Java developer
Можно поступить еще хитрее, и вычислять необходимые данные при добавлении.

Не понадобятся 10к записей, достаточно четырех значений - мин, макс, среднее и количество поступивших данных.

С минимумом/максимумом, думаю, проблем не будет, алгоритм расчета нового среднего на базе предыдущего описан здесь.
Ответ написан
Комментировать
Алгоритм работает от О(n), как совет могу предложить сразу сортировать всю таблицу по возрастанию цены, тогда минимальный будет элемент с индексом 0, средний - (id последнего)/2, максимальный элемент - последний id. Как алгоритм сортировки предлагаю использовать qSort
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы