Top-Themen

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

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

07.03.2012 um 23:09 Uhr, 2568 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
MYSQL Abfrage
gelöst Frage von datadexxDatenbanken20 Kommentare

Halo an alle MySQL Spezialisten! Wie kann ich denn am besten folgende Werte abfragen und berechnen? Ausgang für die ...

PHP
PHP MySQL Abfrage aus Datenbank
Frage von Lost144PHP12 Kommentare

Hallo, Ich habe in einer Datenbank daten über VM's stehen. Angaben wie hostname,adresse, serverat usw. Wie kann ich in ...

Datenbanken
MYSQL Abfrage bereitet mir Probleme
gelöst Frage von datadexxDatenbanken43 Kommentare

Hallo Leute, ich habe wieder ein Problem mit einer SQL Abfrage. Ich habe eine Tabelle die nennt sich pbooking, ...

Datenbanken
(Prozent)s in einer MySQL-Abfrage
gelöst Frage von itebobDatenbanken4 Kommentare

Was bedeutet where nr=%s in einer MySQL-Abfrage? Sowas wie %s gehört bestimmt zu den MySQL-Grundlagen. In meinem Tutorial aber ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing18 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware10 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...