Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: оптимизация ORDER BY
 
 автор: daniel20   (07.12.2011 в 13:42)   письмо автору
 
 

есть две таблицы 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 в 17:44)   письмо автору
 
   для: daniel20   (07.12.2011 в 13:42)
 

Тема еще откыта, вот мое временное решение может кому-то будет полезно:
с вышеуказаного запроса убрал
ORDER BY
min_price ASC
LIMIT
4
потом через PHP сортирую:
// Получаю столбец (также можно сортировать по нескольким столбцам)
foreach ($products as $key => $row) {
$min_price[$key] = $row['min_price'];
}

array_multisort($min_price, SORT_ASC,$products);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования