Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 2553 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 Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Update
WSUS 4 (Server 2012 R2) - Windows 10 Updates nicht möglich (12)

Frage von c0d3.r3d zum Thema Windows Update ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

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

Hyper-V
Hyper V VM abgeschaltet Speicher zu gering (7)

Frage von Thabeus zum Thema Hyper-V ...