Я знаю, что лучший способ - не иметь никакого sql внутри другого sql, особенно сложного, и было бы лучше использовать анализ после запроса, но поскольку способ сборки системы я бы предпочел сделать это только на одном запросеЛюбая оптимизация Идея для этого SQL (mySQL)?
Вот запрос в вопрос («это действительно круто запрос»)
SELECT DISTINCT
o.orders_id,
o.faltantes,
o.customers_name,
o.payment_method,
o.date_purchased,
o.last_modified,
o.currency,
o.currency_value,
ot.text AS order_total,
st.stores_name
FROM (orders o
LEFT JOIN orders_total ot
ON (o.orders_id = ot.orders_id),
stores st,
orders_status s)
INNER JOIN orders_products op
ON (o.orders_id = op.orders_id)
WHERE o.orders_status != 19
AND ot.class = 'ot_total'
AND (ot.value > (SELECT
SUM(pc.monto) +SUM(p.monto)
FROM pagos_clientes pc,
pagos p
WHERE p.id_pago = pc.id_pago
AND pc.id_oferta = o.orders_id)
OR (SELECT
SUM(pc.monto) +SUM(p.monto)
FROM pagos_clientes pc,
pagos p
WHERE p.id_pago = pc.id_pago
AND pc.id_oferta = o.orders_id)IS NULL)
AND payment_method != 'Cambio por faltantes'
AND o.orders_stores_id = '3'
AND o.orders_stores_id = st.stores_id
AND ((o.orders_stores_id IN(1,3))
OR (op.products_distributors_id = '0'))
GROUP BY o.orders_id
ORDER BY o.orders_id DESC
Благодаря никому, что может решить этот вопрос: D (в настоящее время он занимает Arround 2 минуты в режиме реального времени)
Какие индексы у вас есть на разных таблицах? Вы сделали EXPLAIN в запросе? –
Это запрос, сделанный oscommerce, с несколькими дополнительными полями oscommerce имеют все таблицы на myisam с одним первичным ключом, который является автономным, они не имеют никакого отношения. Здесь вы получите объяснение: http: // www. todoastros.com/explain.htm Спасибо за ответ;) – Saikios