Задать вопрос
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
  • Вопрос задан
  • 299 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Тестировщик на Python
    9 месяцев
    Далее
  • Академия Eduson
    Python-разработчик
    9 месяцев
    Далее
  • Merion Academy
    Базы данных с нуля
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 3
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Сконвертировать поле meta_value в integer и проиндексировать
Ответ написан
BorLaze
@BorLaze
Java developer
Можно поступить еще хитрее, и вычислять необходимые данные при добавлении.

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

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

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

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