chrisfah
Goto Top

Mysql Abfrage effizienter machen

Suche nach Tipps, wie ich die folgende Query schneller machen kann

Hallo allerseits,

wieder wende ich mich mit einem kleinen Problemchen an euch!

Die folgende Query klappt zwar, ist aber sehr langsam, zumal die tabellen relativ gross sind, die da durchgeackert werden.

Gibt es da den einen oder anderen Kniff, diese Abfrage zu beschleunigen?

$last_q_r = "SELECT DISTINCT MAX(k.k_id), k.user_id, k.interessenten_id, k.objekt_id, MAX(k.k_erstellt) AS max_k_erstellt   
			FROM ".TABLE_KONTAKTE." k, ".TABLE_OBJEKTE." o   
			WHERE k.kontaktart < '90'   
			AND k.objekt_id = o.o_id 
			AND o.verkauft != '1'   
			GROUP BY k.interessenten_id, k.user_id, k.objekt_id 
			HAVING DATEDIFF(NOW(), max_k_erstellt) > ".(int)$idle_days." ";  

Würde es Sinn machen, das DATEDIFF in den WHERE Bereich zu stecken ?

Vielen Dank im voraus,
lg, Chris

PS: Das DISTINCTMAX(k.k_id) habe ich schon gekillt, k_id wird ausserdem nicht benötigt.

Content-ID: 172232

Url: https://administrator.de/forum/mysql-abfrage-effizienter-machen-172232.html

Ausgedruckt am: 26.12.2024 um 22:12 Uhr

godlie
godlie 29.08.2011 um 21:26:38 Uhr
Goto Top
Hallo,

wie sehen die Indizes für die Tabelle so aus?
ChrisFah
ChrisFah 29.08.2011 um 23:51:42 Uhr
Goto Top
Zitat von @godlie:
Hallo,

wie sehen die Indizes für die Tabelle so aus?

Nur der Standard vom Erstellen der Tabellen
pi314
pi314 12.09.2011 um 09:28:23 Uhr
Goto Top
Servus,

als erstes würde ich mal Indexes empfehlen, da ja die Tabellen Deiner Aussage nach recht groß sind:
k.objekt_id und k.kontaktart sind erstmal gute Kandidaten.

Als nächstes fällt mir auf, dass du k.kontaktart mit kleiner als abfrägst und dann ein Char angibst.
Welchen Typ hat denn die Spalte k.kontaktart? Number oder VarChar o. ä.?
Hier sollte sie Number haben, da ansonsten noch eine implizite Konvertierung von Nöten ist, die natürlich Zeit frisst..

Vielleicht hilft's ja schon, ansonsten muss man noch tiefer graben face-smile

so long,
pi