Skip navigation links

MySQL Forums :: German :: Performance bei SELECT


Advanced Search

Re: Performance bei SELECT
Posted by: Thomas Wiedmann ()
Date: February 09, 2012 08:41AM

Hallo Mark,

auf die schnelle gesehen, läuft bei invoicelines was falsch. Es wird DISTINCT, GROUP und MIN() gemischt. Entweder das eine oder das andere.. DISTINCT ist teurer als der einfache GROUP BY

bisher:
...
LEFT JOIN ( SELECT DISTINCT ArtName,ItemNrInt,SUM(OrderQty) AS OrderQty,SUM(FullPrice) AS FullPrice,OrderDate,SUM(ItemPriceNoVAT) AS ItemPriceNoVAT,Status 
        FROM invoicelines WHERE  ( OrderQty > '0' AND status = 'AUS' AND  invoicelines.attr_department = '6' AND  (  invoicelines.OrderDate >= '2012-02-01 00:00:00' AND  invoicelines.OrderDate <= '2012-02-09 23:59:59' ))
       GROUP BY ItemNrInt
       ORDER BY NULL ) invoicelines ON (invoicelines.ItemNrInt = items.ItemNrInt) 
...

Vorschlag (siehe MIN(ArtName). Ob das Ergebnis stimmt, mußt Du allerdings prüfen.
...
LEFT JOIN ( SELECT ItemNrInt,MIN(ArtName),SUM(OrderQty) AS OrderQty,SUM(FullPrice) AS FullPrice,OrderDate,SUM(ItemPriceNoVAT) AS ItemPriceNoVAT,Status 
        FROM invoicelines WHERE  ( OrderQty > '0' AND status = 'AUS' AND  invoicelines.attr_department = '6' AND  (  invoicelines.OrderDate >= '2012-02-01 00:00:00' AND  invoicelines.OrderDate <= '2012-02-09 23:59:59' ))
       GROUP BY ItemNrInt
       ORDER BY NULL ) invoicelines ON (invoicelines.ItemNrInt = items.ItemNrInt) 
...

Der EXPLAIN zeigt sehr schön, wie die einzelnen SUB-Select über einen KEY zugreifen können. Die Anzahl der Zeilen in der Spalte "rows" ist jetzt auch im akzeptablen Bereich.


Bei HAVING ist noch etwas Tuning möglich (generell immer auf die korrekten Datentypen achten und kein unnötiges Typescasting erzwingen)

Anstatt
HAVING  stockValue > '0'

besser
HAVING  stockValue > 0

Zu Deiner Frage: Hier läßt sich aus meiner Sicht nichts machen und hier ist auch nicht das große Performanceproblem würde ich behaupten. Der SUM läßt sich so nicht optimieren ohne alles über den Haufen zu schmeissen.
SUM(IF(invoicelines.OrderQty > 0,invoicelines.OrderQty,0)) AS QtyTotal,

In der Tabelle items_stock ist die Spalte
`locationID` varchar(10) NOT NULL

eventuell auf INT umstellbar (wenn anstatt "All" z. B. dem Wert 0 ersetzt wird und die Abfragen von auf numerische Vergleiche
WHERE items_stock.ItemNrInt = items.ItemNrInt  AND (items_stock.locationID  = 1 OR items_stock.locationID = 2 )

umgearbeitet werden. Zahlen können einfach schneller verglichen werden als Strings.


Grüße
Thomas

Options: ReplyQuote


Subject Views Written By Posted
Performance bei SELECT 1336 Mark Knochen 01/19/2012 07:17AM
Re: Performance bei SELECT 765 Thomas Wiedmann 01/19/2012 12:59PM
Re: Performance bei SELECT 904 Mark Knochen 01/20/2012 05:33AM
Re: Performance bei SELECT 1031 Thomas Wiedmann 01/20/2012 06:10AM
Re: Performance bei SELECT 807 Mark Knochen 01/20/2012 07:06AM
Re: Performance bei SELECT 745 Thomas Wiedmann 01/20/2012 12:11PM
Re: Performance bei SELECT 718 Mark Knochen 01/25/2012 04:11AM
Re: Performance bei SELECT 635 Thomas Wiedmann 01/25/2012 04:24AM
Re: Performance bei SELECT 682 Mark Knochen 01/25/2012 04:30AM
Re: Performance bei SELECT 666 Thomas Wiedmann 01/25/2012 04:49AM
Re: Performance bei SELECT 606 Mark Knochen 01/25/2012 06:05AM
Re: Performance bei SELECT 792 Thomas Wiedmann 01/25/2012 06:37AM
Re: Performance bei SELECT 664 Mark Knochen 01/25/2012 07:46AM
Re: Performance bei SELECT 891 Thomas Wiedmann 01/26/2012 12:57AM
Re: Performance bei SELECT 676 Mark Knochen 01/25/2012 11:11PM
Re: Performance bei SELECT 627 Thomas Wiedmann 01/25/2012 11:50PM
Re: Performance bei SELECT 585 Mark Knochen 01/27/2012 08:27AM
Re: Performance bei SELECT 812 Thomas Wiedmann 01/27/2012 06:21AM
Re: Performance bei SELECT 689 Mark Knochen 02/02/2012 10:06PM
Re: Performance bei SELECT 567 Mark Knochen 02/03/2012 05:34AM
Re: Performance bei SELECT 749 Thomas Wiedmann 02/03/2012 02:04PM
Re: Performance bei SELECT 510 Mark Knochen 02/08/2012 09:52PM
Re: Performance bei SELECT 711 Thomas Wiedmann 02/09/2012 08:41AM
Re: Performance bei SELECT 624 Mark Knochen 02/10/2012 02:03AM
Re: Performance bei SELECT 740 Thomas Wiedmann 02/10/2012 02:52AM
Re: Performance bei SELECT 843 Mark Knochen 02/10/2012 04:51AM
Re: Performance bei SELECT 731 Thomas Wiedmann 02/09/2012 11:58PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.