优化(我的)SQL查询

时间:2010-04-03 18:16:01

标签: zend-framework mysql zend-db

我通常使用ORM而不是SQL,而且我在不同的JOIN上稍微脱节......

SELECT `order_invoice`.*
     , `client`.*
     , `order_product`.*
     , SUM(product.cost) as net 
  FROM `order_invoice` 
  LEFT JOIN `client` 
    ON order_invoice.client_id = client.client_id 
  LEFT JOIN `order_product` 
    ON order_invoice.invoice_id = order_product.invoice_id 
  LEFT JOIN `product` 
    ON order_product.product_id = product.product_id 
 WHERE (order_invoice.date_created >= '2009-01-01') 
   AND (order_invoice.date_created <= '2009-02-01') 
 GROUP BY `order_invoice`.`invoice_id`

表格/列是逻辑名称......这是一个商店类型的应用程序...查询有效...它只是非常慢......

我使用Zend Framework并且通常会使用Zend_Db_Table_Row::find(Parent|Dependent)Row(set)('TableClass')但是我必须进行大量的连接,并且我认为通过在一个查询而不是数百个中完成所有操作来提高性能...

我可以使用更合适的JOIN或不同的实现来改进上述查询吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

查询错误,GROUP BY错误。 SELECT部分​​中不在聚合函数中的所有列都必须位于GROUP BY中。你只提了一栏。

更改SQL模式,将其设置为ONLY_FULL_GROUP_BY

完成此操作并且您有正确的查询后,请使用EXPLAIN查找查询的执行方式以及使用的索引。然后开始优化。