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
GELÖST

Vereinfachung und Beschleunigung einer Mysql Abfrage

Frage Entwicklung Datenbanken

Mitglied: ChrisFah

ChrisFah (Level 1) - Jetzt verbinden

24.08.2011, aktualisiert 25.08.2011, 2968 Aufrufe, 8 Kommentare

Ich suche eine resourcensparende Version der folgenden Abfrage

Hallo Leute,

wieder einaml wende ich mich vertrauensvoll und hilfesuchend an euch!

Ich habe eine Mysql Query, die aus zwei Teilen besteht. Einzeln sind diese Abfragen relativ rasch, in Kombination jedoch sind sie extrem langsam und gehen nahezu an das Zeillimit, von der CPU Auslastung ganz zu schweigen....
Einzelne Queries:
01.
$inter_q_r2 = "SELECT DISTINCT i.i_id, i.vorname, i.nachname, i.adresse, i.plz, i.ort, i.land, DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum   
02.
				FROM ".TABLE_INTERESSENTEN." i, ".TABLE_OBJEKT2MAKLER." o2m, ".TABLE_KONTAKTE." k  
03.
				WHERE o2m.u_id = '".(int)$_SESSION['u_id']."'  
04.
				AND o2m.chief_agent = '1'  
05.
				AND k.objekt_id = o2m.o_id  
06.
				AND i.i_id = k.interessenten_id  
07.
				AND i.i_system_status = '1'  
08.
				AND i.i_status = '1' 
09.
				ORDER BY i.nachname ASC, i.vorname ASC, i.plz ASC ";
01.
$inter_q_r2 = "SELECT DISTINCT i.i_id, i.vorname, i.nachname, i.adresse, i.plz, i.ort, i.land, DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum   
02.
				FROM ".TABLE_INTERESSENTEN." i  
03.
				WHERE i.firmen_id = '".(int)$_SESSION['firmen_id']."' 
04.
				AND i.i_system_status = '1'  
05.
				AND i.i_status = '1' 
06.
				ORDER BY i.nachname ASC, i.vorname ASC, i.plz ASC ";
Kann mmir jemand helfen, diese beiden Queries in einer gemeinsamen zu optimieren!?!?
Bisher sieht es bei mir so aus, ist aber extrem langsam...
01.
$inter_q_r2 = "SELECT DISTINCT i.i_id, i.vorname, i.nachname, i.adresse, i.plz, i.ort, i.land, DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum   
02.
				FROM ".TABLE_INTERESSENTEN." i, ".TABLE_OBJEKT2MAKLER." o2m, ".TABLE_KONTAKTE." k  
03.
				WHERE o2m.u_id = '".(int)$_SESSION['u_id']."'  
04.
				AND o2m.chief_agent = '1'  
05.
				AND k.objekt_id = o2m.o_id  
06.
				AND i.i_id = k.interessenten_id  
07.
				OR (i.firmen_id = '".(int)$_SESSION['firmen_id']."')  
08.
				AND i.i_system_status = '1'  
09.
				AND i.i_status = '1' 
10.
				ORDER BY i.nachname ASC, i.vorname ASC, i.plz ASC ";
Wie gesagt, die beiden Teilqueries einzeln gehen rasch, zusammen sind sie elends langsam....

Lg, Chris
Mitglied: nxclass
25.08.2011 um 00:04 Uhr
... ich sehe nur eine Query !? - evtl. mal JOIN benutzen und über die Spalten in ON einen Index setzen.
Bitte warten ..
Mitglied: pi314
28.08.2011 um 13:24 Uhr
Hi,

was heißt "in Kombination"?
Hängst du die mit "union all" oder "union" zusammen?


Gruß,
pi314
Bitte warten ..
Mitglied: nxclass
28.08.2011 um 15:18 Uhr
01.
SELECT 
02.
	i.vorname, 
03.
	i.nachname, 
04.
	i.adresse, 
05.
	i.plz, 
06.
	i.ort, 
07.
	i.land, 
08.
	DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum 
09.
FROM 
10.
	".TABLE_KONTAKTE." k 
11.
		LEFT JOIN ".TABLE_INTERESSENTEN." i ON ( i.i_id = k.interessenten_id ) 
12.
		LEFT JOIN ".TABLE_OBJEKT2MAKLER." o2m ON ( o2m.o_id = k.objekt_id ) 
13.
WHERE 
14.
	i.i_system_status = '1' AND 
15.
	i.i_status = '1' AND ( 
16.
17.
			o2m.u_id = '".(int)$_SESSION['u_id']."'	AND 
18.
			o2m.chief_agent = '1' 
19.
		) OR ( 
20.
			i.firmen_id = '".(int)$_SESSION['firmen_id']."' 
21.
22.
23.
ORDER BY 
24.
	i.nachname, 
25.
	i.vorname, 
26.
	i.plz 
27.
;
Index über:
i.i_id
k.interessenten_id
k.objekt_id
o2m.o_id

...ob die Abfrage nun das richtige zurück gibt musst Du testen.
Bitte warten ..
Mitglied: Biber
28.08.2011 um 15:30 Uhr
Moin nxclass,

aber ich denke, ein UNION über die zwei (funktionierenden) Queries geht schneller als irgendeine beliebige Query mit "OR".

01.
Select x.* from ( 
02.
 SELECT DISTINCT i.i_id, i.vorname, i.nachname, i.adresse, i.plz, i.ort,  
03.
                i.land, DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum 
04.
                FROM ".TABLE_INTERESSENTEN." i, ".TABLE_OBJEKT2MAKLER." o2m, ".TABLE_KONTAKTE." k  
05.
		WHERE o2m.u_id = '".(int)$_SESSION['u_id']."'  
06.
		AND o2m.chief_agent = '1'  
07.
		AND k.objekt_id = o2m.o_id  
08.
		AND i.i_id = k.interessenten_id  
09.
		AND i.i_system_status = '1'  
10.
		AND i.i_status = '1' 
11.
UNION 
12.
 SELECT DISTINCT i.i_id, i.vorname, i.nachname, i.adresse, i.plz, i.ort, i.land, DATE_FORMAT(i.i_erstellt, '%d. %m. %Y') as datum   
13.
 		FROM ".TABLE_INTERESSENTEN." i  
14.
 		WHERE i.firmen_id = '".(int)$_SESSION['firmen_id']."' 
15.
 		AND i.i_system_status = '1'  
16.
 		AND i.i_status = '1' 
17.
		 
18.
) x 
19.
ORDER BY x.nachname ASC, x.vorname ASC, x.plz ASC
P.S. Wenn in den bisherigen Queries ein DISTINCT nötig ist, dann ist aber die Struktur marode.
Kommen denn wirklich ohne DISTINCT doppelte Sätze heraus?

Grüße
Biber
Bitte warten ..
Mitglied: ChrisFah
28.08.2011 um 15:34 Uhr
Hallo,

die erste und die zweite Query vom meinem obersten Post zusammengefasst ergibt die dritte, sehr langsame Query.

lg, Chris
Bitte warten ..
Mitglied: nxclass
28.08.2011 um 20:23 Uhr
in diesem Fall würde ich aber empfehlen statt 2x
01.
 		AND i.i_system_status = '1'  
02.
 		AND i.i_status = '1'
auszuführen, schon vor dem Union die Daten mit diesen WHERE Bedingungen zu reduzieren. Zum Beispiel mit einem View, Unterabfrage oder temp. Tabelle.

Das
01.
DISTINCT i.i_id
ist in dem 2. Teil der Abfrage wohl überflüssig, da i.i_id sicherlich ein eindeutiger Wert ist !?
Bitte warten ..
Mitglied: Biber
28.08.2011 um 21:08 Uhr
Moin nxclass,

ist natürlich alles Spekulation.
Wenn in der WHERE-Bedingung beispielsweise eine Zeitraum-Einschränkung stünde ("nur die Sätze vom 1.7.2011 bis 31.7.2011")...
--> dann würde ich von einer wesentlichen Reduzierung aller Sätze ausgehen.

Bei Feldern, die den Verlegenheitsnamen "status" und "system_status" haben, gehe ich durch leidvolle Erfahrung eher davon aus, dass 98% aller Sätze durch diese Maschen schlüpfen.
Ist aber nur ein Verdacht.

Mit der 2.Distinct-Bedingung hast du aber sicherlich Recht.

Das zweite DISTINCT kann in meinem UNION rausfliegen, unabhängig davon kann auch aus dem UNION ein UNION ALL werden.
Dann spare ich noch einen zeitaufwändigen SORT-Vorgang und bin erst recht schneller als du

Grüße
Biber
Bitte warten ..
Mitglied: ChrisFah
28.08.2011 um 23:29 Uhr
So liebe Leute,

ich habs jetzt so gelöst, wie der Biber es vorgeschlagen hat.
Mit UNION ALL und die beiden DISTINCT sind wirklich überflüssig gewesen (eine Altlast von ner anderen Query Version).
Und es fetzt nur so ab !!!!
SUPER !!!

Vielen Dank euch allen !!!

lg, Chris
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
Suchfeld mit Abfrage auf eine MySQL-Datenbank
gelöst Frage von SaschaRDPHP6 Kommentare

Hallo zusammen, ich steh mal wieder auf dem Schlauch. Bin dabei ein Suchfeld auf die Webseite zu bringen. Jedoch ...

Datenbanken
MySQL Abfrage für eine Umsatzauswertung kombinieren
gelöst Frage von RedBullmachtfitDatenbanken2 Kommentare

Hallo zusammen, ich möchte Kundenumsätze aus einer MySQL (v5.6, Windows) Datenbank ziehen. Ich komme mit der Struktur jedoch nicht ...

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 ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 10 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 10 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 18 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...