Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MySQL - Abfrage optimieren

Frage Entwicklung Datenbanken

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

07.03.2012 um 23:09 Uhr, 2540 Aufrufe, 5 Kommentare

Hallo Gemeinde,

ich habe in MySQL eine Tabelle, die folgenden Aufbau hat:

JahrMonat - BereichsID - a - b - c - d ...
201001 - 1 - ...
201002 - 1 - ...
201003 - 1 - ...
201004 - 1 - ...
201005 - 1 - ...

Es werden monatsbezogen für mehrere Bereiche verschiedene Spalten (a - d in diesem Beispiel) gespeichert. Jetzt benötige ich eine Abfrage, in der ich mehrere Monate zusammenfasse und dabei die Spalten miteinander verrechne:

SELECT ((t1.a + t1.b + t1.c) - (t1.d)) AS Daten01,((t2.a + t2.b + t2.c) - (t2.d)) AS Daten02,((t3.a + t3.b + t3.c) - (t3.d)) AS Daten03
FROM tabelle t1 LEFT JOIN tabelle t2 on (t1.BereichsID = t2.BereichsID) LEFT JOIN tabelle t3 on (t2.BereichsID = t3.BereichsID)
WHERE t.BereichsID = 1234

So oder so ähnlich (aus dem Kopf getipt - ungetestet) sieht meine Abfrage aus, die auch laufen würde. Jedoch braucht diese einige Sekunden, obwohl "keine" Daten drin sind.
Wie bekomme ich das Ding schneller? Wie kann ich zusätzlich noch die Monate mit einschränken?

Danke euch!!
Mitglied: nxclass
07.03.2012 um 23:38 Uhr
tut mir Leid - aber deine Abfrage ergibt keinen Sinn !?

  • wozu die Berechnungen 3 mal durchführen
  • über die selbe Tabelle (selbe Daten)
  • und mit LEFT Join verbinden

... was erwartest Du für eine Ausgabe ?

in der ich mehrere Monate zusammenfasse und dabei die Spalten miteinander verrechne
da müsste doch irgendwo auch auf JahrMonat bezug genommen werden
Bitte warten ..
Mitglied: Maik87
07.03.2012 um 23:47 Uhr
Sorry, du hast Recht...
Wie ging es weiter...!?

WHERE t1.BereichsID = 1234 AND t1.JahrMonat = 201001 AND t2.JahrMonat = 201002 AND t3.JahrMonat = 201003

glaub ich...

Ich möchte die Daten, die Zeilenweise in der DB gespeichert sind als Spalten ausgeben.
Bitte warten ..
Mitglied: nxclass
08.03.2012 um 09:51 Uhr
verstehe - dazu muss ich aber sagen, dass die Datenbank (Datenbankabfrage) nicht die Aufgabe hat Ausgaben für die Ausgabe um zu formatieren.
Oder anders gesagt : Pivot - Tabellendarstellung kann nicht sinnvoll mit der Datenbankabfrage gemacht werden.
Bitte warten ..
Mitglied: Maik87
08.03.2012 um 10:02 Uhr
Ja, dass es nicht optimal ist, habe ich mir bereits bei den Script-Laufzeiten gedacht.

Aber wie kann ich es sonst lösen? Die Daten sind nunmal Zeilenweise gespeichert (was ich auch gern so beibehalten würde, da je Monat viele Spalten gespeichert sind, die ich sonst auch nicht anders aufzuteilen wüsste).

Würde sowas auch mit einem Haufen Sub-Selects laufen?

SELECT (SELECT (t.a+t.b+t.c) AS Daten FROM tabelle t where t.JahrMonat = "201001) AS Dat201001, (SELECT (t.a+t.b+t.c) AS Daten FROM tabelle t where t.JahrMonat = "201002) AS Dat201002 ....

Ist dies performanter?
Bitte warten ..
Mitglied: nxclass
08.03.2012 um 10:40 Uhr
Da Du nur durch reduzieren der zu verarbeitenden Daten eine Verbesserung erzielen kannst - aber bei jedem Sub Select eine andere Where Bedingung vorhanden ist - sehe ich kaum Spielraum für Optimierungen über die Select Abfrage.

... ggf kann man vorher noch den Datenbestand auf das Jahr reduzieren
01.
JahrMonat LIKE '2010%'
... aber viel wird es wohl nicht bringen.

Meine Empfehlung:
  • Spalte das Feld JahrMonat auf in Jahr und Monat
  • Ersetze die Felder a - d durch key und value
01.
Jahr | Monat | BereichsID | key | value 
02.
2010 | 1 | 1 | a | wert 
03.
2010 | 1 | 1 | b | wert 
04.
2010 | 1 | 1 | c | wert 
05.
2010 | 1 | 1 | d | wert 
06.
2010 | 2 | 1 | a | wert 
07.
...
... dann geht das Filtern und Gruppieren schneller und einfacher
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst MYSQL Abfrage Werte summieren (3)

Frage von Ghost108 zum Thema Datenbanken ...

Datenbanken
gelöst MySQL Abfrage um JOIN erweitern (14)

Frage von datadexx zum Thema Datenbanken ...

Datenbanken
gelöst MySQL Abfrage für demographische Zwecke (3)

Frage von morphil zum Thema Datenbanken ...

Netzwerke
gelöst Home-LAN optimieren (68)

Frage von Merris zum Thema Netzwerke ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (58)

Frage von pjrtvly zum Thema Internet ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (26)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

DSL, VDSL
VDSL Signal via PowerLine an Fritzbox - Möglich? (19)

Frage von Seichobob zum Thema DSL, VDSL ...