Задавайте вопросы, мы ответим
Вы не зашли.
есть две таблицы prc_online_stores_items, и prc_items_prices пытаюсь найти минимальную цену товаров через запрос:
SELECT
***,
CASE ip.currency
WHEN 1 THEN
new_price
WHEN 2 THEN
new_price * 16
WHEN 3 THEN
new_price * 12
END AS `min_price`
FROM
`prc_online_stores_items` AS `osi`
INNER JOIN `prc_items_prices` AS `ip`
ON ip.online_stores_items_id = osi.online_stores_items_id AND is_current_price = 1 AND new_price > 0
GROUP BY
`osi`.`items_id`
ORDER BY
min_price ASC
LIMIT
4
без ORDER BY работает в 50 раз быстрее.
как оптимизировать ORDER BY если min_price проиндексирован но результата никакого, по идее и за того что там очень много дубликатов и еще GROUP BY делается со строкой из другой таблицы, то-есть индекс на группу (min_price,items_id) не пойдет. Есть какие-то идеи?
Отредактированно daniel20 (07.12.2011 13:29:16)
Неактивен
case очень странный. Плюс не понятен смысл запроса: так как нету разумного
WHERE — вы выбираете все товары(?), и ищете среди них самые дешевые?
Неактивен
paulus написал:
case очень странный. Плюс не понятен смысл запроса: так как нету разумного
WHERE — вы выбираете все товары(?), и ищете среди них самые дешевые?
case очень странный. - так как case ни как не влияет на основную проблему, не буду вдаваться в деталях.
не понятен смысл запроса: так как нету разумного WHERE - вы сами ответили на свой вопрос. Да, я выбираю все товары.
и ищете среди них самые дешевые? - абсолютно верно.
Отредактированно daniel20 (07.12.2011 16:33:30)
Неактивен
Ну, тогда Вы делаете всё правильно, смотрите в сторону денормализации.
P.S. А case как раз влияет, если бы можно было сортировать по min_price по индексу —
можно было бы рыть в этом направлении.
Неактивен
Я то знаю что все правильно делаю, но 0.5сек выполнения скрипта только при 1300 сток, уж жутко смущает.
смотрите в сторону денормализации. - ой, так не хочется этого делать. Этот метод осавил как последний вариант.
вот здесь, http://litecode.ru/mysql/responses_optimization.shtml
говорят "Не сортируйте в базе, ... лучше выполнить эти действия в переменных интерпретатора."
что вы об этом думаете? мое мнение что это не правильная логика программирования.
Отредактированно daniel20 (07.12.2011 17:06:44)
Неактивен
Ну, учитывая, что использование индексов там написано последним, — стоит
ли удивляться и другим написанным там фактам?
Если ORDER BY работает по индексу — почему нет?
Неактивен