Veröffentlicht 2. Februar 200520 j Hallo, ist es realistisch das dass ausführen des Folgenden SQL-Commandos ca 1,5 sec dauern könnte? Mein Chef sagt es müsste schneller gehen, habe aber keine Anung wie ich das anstellen soll! !Danke für jeden Tipp(Hilfe)! Das Sql_Commando wird von einem Client zu einem Server auf der die Datenbank ist geschikt. Datenbank: MySql4.1 im Commando sind 3 Sub-Select's und 2 Sub-Sub-Select's Die Datenmenge der einzelnen Tabellen variieren zurzeit um die 800 :mod: SELECT kalkulation_controlling.auftraege.auftragsnr, kalkulation_controlling.auftraege.angebotsnr, kalkulation_controlling.auftraege.auftragstyp, kalkulation_controlling.auftraege.fk_anlagennr, kalkulation_controlling.auftraege.auftragsstatus, kalkulation_controlling.auftraege.kunde, kalkulation_controlling.auftraege.bestellnrkunde, kalkulation_controlling.auftraege.bestelldatum, kalkulation_controlling.auftraege.bezeichnung, kalkulation_controlling.auftraege.produktbereich, kalkulation_controlling.auftraege.projektleiterintern, kalkulation_controlling.auftraege.verkaeufer, kalkulation_controlling.auftraege.techasp, kalkulation_controlling.auftraege.kaufmasp, kalkulation_controlling.auftraege.waehrung, kalkulation_controlling.auftraege.eingabedatum, kalkulation_controlling.auftraege.eingegebenvon, sum(auftragspositionen.gepl_menge*auftragspositionen.gepl_einzelkosten) as Sollkosten_gesamt, TempTable.Istkosten_gesamt, sum(auftragspositionen.vkpreis) as Auftragswert, LeistungsTable.Istkosten_Leistung, LeistungsTable.Sollkosten_Leistung, MaterialTable.Istkosten_Material, MaterialTable.Sollkosten_Material FROM auftragspositionen RIGHT JOIN auftraege ON auftraege.auftragsnr = auftragspositionen.fk_auftragsnr LEFT JOIN (SELECT kalkulation_controlling.auftraege.auftragsnr, sum(kalkulation_controlling.dienstleistungserfassung.menge*kalkulation_controlling.dienstleistungserfassung.kostenproeinheit) as Istkosten_gesamt FROM kalkulation_controlling.auftraege LEFT JOIN kalkulation_controlling.dienstleistungserfassung ON kalkulation_controlling.auftraege.auftragsnr = kalkulation_controlling.dienstleistungserfassung.fk_auftragsnr GROUP BY kalkulation_controlling.auftraege.auftragsnr) As TempTable ON TempTable.auftragsnr = kalkulation_controlling.auftraege.auftragsnr LEFT JOIN (SELECT auftraege.auftragsnr, Dienstleistungen.Sollkosten_Leistung As Sollkosten_Leistung, sum(dienstleistungserfassung.menge*dienstleistungserfassung.kostenproeinheit) as Istkosten_Leistung FROM auftraege LEFT JOIN dienstleistungserfassung ON auftraege.auftragsnr = dienstleistungserfassung.fk_auftragsnr LEFT JOIN (SELECT auftragspositionen.fk_auftragsnr, auftragspositionen.gepl_menge, auftragspositionen.gepl_einzelkosten, sum(auftragspositionen.gepl_menge*auftragspositionen.gepl_einzelkosten) as Sollkosten_Leistung FROM auftragspositionen WHERE auftragspositionen.leistungskategorie = "D" GROUP BY fk_auftragsnr) As Dienstleistungen ON auftraege.auftragsnr = Dienstleistungen.fk_auftragsnr GROUP BY auftraege.auftragsnr) As LeistungsTable ON LeistungsTable.auftragsnr = auftraege.auftragsnr LEFT JOIN (SELECT auftraege.auftragsnr, Materialkosten.Sollkosten_Material As Sollkosten_Material, sum(materialkostenerfassung.menge*materialkostenerfassung.ekpreis) as Istkosten_Material FROM auftraege LEFT JOIN materialkostenerfassung ON auftraege.auftragsnr = materialkostenerfassung.fk_auftragsnr LEFT JOIN (SELECT auftragspositionen.fk_auftragsnr, auftragspositionen.gepl_menge, auftragspositionen.gepl_einzelkosten, sum(auftragspositionen.gepl_menge*auftragspositionen.gepl_einzelkosten) as Sollkosten_Material FROM auftragspositionen WHERE auftragspositionen.leistungskategorie = "M" GROUP BY fk_auftragsnr) As Materialkosten ON auftraege.auftragsnr = Materialkosten.fk_auftragsnr GROUP BY auftraege.auftragsnr) As MaterialTable ON MaterialTable.auftragsnr = auftraege.auftragsnr WHERE auftraege.bestelldatum LIKE "%2005" AND auftraege.auftragsstatus LIKE "%" GROUP BY auftraege.auftragsnr
2. Februar 200520 j Haben die Tabellen Indexe? habe es jetzt mit zusätzlichem Index versucht-> resultat von ca 1,25 sec auf ca 0,05sec echt Super -> Danke
2. Februar 200520 j AND auftraege.auftragsstatus LIKE "%" kann man sich auf jeden Fall sparen! anstelle von "%" kommt ein Parameter hin. Es kann auch sein das nach einem bestimmten Status gefiltert weren muss
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.