@focuspro
Есть 10 000 лотов с аукциона с ценами, вывожу минимальную, максимальную, среднюю цену
Запрос обрабатывается 13 секунд, чем больше лотов, тем больше время запроса
Запрос обрабатывается 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