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-Key: 172232

Url: https://administrator.de/contentid/172232

Printed on: April 18, 2024 at 22:04 o'clock

Member: godlie
godlie Aug 29, 2011 at 19:26:38 (UTC)
Goto Top
Hallo,

wie sehen die Indizes für die Tabelle so aus?
Member: ChrisFah
ChrisFah Aug 29, 2011 at 21:51:42 (UTC)
Goto Top
Zitat von @godlie:
Hallo,

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

Nur der Standard vom Erstellen der Tabellen
Member: pi314
pi314 Sep 12, 2011 at 07:28:23 (UTC)
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