SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.12.2011 13:26:36

daniel20
Участник
Зарегистрирован: 07.12.2011
Сообщений: 7

оптимизация ORDER BY

есть две таблицы 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)

Неактивен

 

#2 07.12.2011 15:19:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: оптимизация ORDER BY

case очень странный. Плюс не понятен смысл запроса: так как нету разумного
WHERE — вы выбираете все товары(?), и ищете среди них самые дешевые?

Неактивен

 

#3 07.12.2011 16:28:34

daniel20
Участник
Зарегистрирован: 07.12.2011
Сообщений: 7

Re: оптимизация ORDER BY

paulus написал:

case очень странный. Плюс не понятен смысл запроса: так как нету разумного
WHERE — вы выбираете все товары(?), и ищете среди них самые дешевые?

case очень странный.   - так как case ни как не влияет на основную проблему, не буду вдаваться в деталях.
не понятен смысл запроса: так как нету разумного WHERE - вы сами ответили на свой вопрос. Да, я выбираю все товары.
и ищете среди них самые дешевые? - абсолютно верно.

Отредактированно daniel20 (07.12.2011 16:33:30)

Неактивен

 

#4 07.12.2011 16:59:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: оптимизация ORDER BY

Ну, тогда Вы делаете всё правильно, смотрите в сторону денормализации.

P.S. А case как раз влияет, если бы можно было сортировать по min_price по индексу —
можно было бы рыть в этом направлении.

Неактивен

 

#5 07.12.2011 17:00:29

daniel20
Участник
Зарегистрирован: 07.12.2011
Сообщений: 7

Re: оптимизация ORDER BY

Я то знаю что все правильно делаю, но 0.5сек выполнения скрипта только при 1300 сток, уж жутко смущает.

смотрите в сторону денормализации. - ой, так не хочется этого делать. Этот метод осавил как последний вариант.

вот здесь, http://litecode.ru/mysql/responses_optimization.shtml
говорят "Не сортируйте в базе, ... лучше выполнить эти действия в переменных интерпретатора."
что вы об этом думаете? мое мнение что это не правильная логика программирования.

Отредактированно daniel20 (07.12.2011 17:06:44)

Неактивен

 

#6 08.12.2011 12:28:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: оптимизация ORDER BY

Ну, учитывая, что использование индексов там написано последним, — стоит
ли удивляться и другим написанным там фактам? smile

Если ORDER BY работает по индексу — почему нет?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson