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



@focuspro

Есть 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


Решения вопроса 0


Ответы на вопрос 3



@rozhnev

Сконвертировать поле meta_value в integer и проиндексировать



@BorLaze

Можно поступить еще хитрее, и вычислять необходимые данные при добавлении.

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

С минимумом/максимумом, думаю, проблем не будет, алгоритм расчета нового среднего на базе предыдущего описан здесь.



@NikBr_9

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *