Optimising (My)SQL Query
- by Simon
I usually use ORM instead of SQL and I am slightly out of touch on the different JOINs...
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`
The tables/ columns are logically names... it's an shop type application... the query works... it's just very very slow...
I use the Zend Framework and would usually use Zend_Db_Table_Row::find(Parent|Dependent)Row(set)('TableClass') but I have to make lots of joins and I thought it'll improve performance by doing it all in one query instead of hundreds...
Can I improve the above query by using more appropriate JOINs or a different implementation? Many thanks.