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