这个SQL(mySQL)有什么优化的想法吗?
我知道最好的方法是不要在其他sql中包含任何sql,特别是复杂的sql,最好在查询后使用分析,但由于系统的构建方式,我宁愿只在一个查询中进行分析 下面是有问题的查询(“这是一个非常酷的查询”)这个SQL(mySQL)有什么优化的想法吗?,sql,mysql,Sql,Mysql,我知道最好的方法是不要在其他sql中包含任何sql,特别是复杂的sql,最好在查询后使用分析,但由于系统的构建方式,我宁愿只在一个查询中进行分析 下面是有问题的查询(“这是一个非常酷的查询”) 感谢所有能够解决这个问题的人:D(目前需要大约2分钟的实时时间)通常,将子查询移动到中是一个很大的改进。 不要使用逗号连接,正确连接和逗号连接的混合经常会中断。 我看到orders\U status表与任何其他表都没有关系。 添加适当的关系可以多次提高性能 分析查询性能并找到优化的位置。EXPLAIN的
感谢所有能够解决这个问题的人:D(目前需要大约2分钟的实时时间)通常,将子查询移动到中是一个很大的改进。 不要使用逗号连接,正确连接和逗号连接的混合经常会中断。
我看到orders\U status表与任何其他表都没有关系。 添加适当的关系可以多次提高性能
分析查询性能并找到优化的位置。EXPLAIN的输出显示,没有足够的索引使查询能够在不执行完整表扫描的情况下运行。最严重的问题是
orders\u products
表,该表在orders\u id
列上没有合适的索引
您应该检查
JOIN
条件中使用的每一列是否有索引。仅此一点就非常有用。您在各种表上有哪些索引?您是否对该查询进行了解释?这是由oscommerce进行的查询,oscommerce在myisam上有几个额外的字段,所有的表都有一个主键,主键是自动数字,它们之间没有任何关系。您有解释结果:感谢您的回答;)非常感谢,这是orders_的状态,它仍然来自一个老问题,我个人讨厌加入,现在我讨厌德国人,因为他们在WC击败了阿根廷(2006年、2010年,当然还有1990年)但现在是因为他们建立了oscommerce:D再次感谢你Naktibalda:D我知道我无论如何都要优化代码:p汉克斯迈克,我会检查:)
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