mySQL JOIN über 600.000 Daten

UBerer

Neues Mitglied
Hallo,
ich habe 2 Tabellen mit je 300.00 Datensätzen aktuell:

Leider kann ich diese 2 Tabellen nicht über einen Index matchen sondern muss schauen, welche 2 liegen direkt nebeneinander:

Dies mache ich wie folgt:


SELECT * FROM `ausgeliefert` JOIN `ansichten` ON (ausgeliefert.`session` = ansichten.`session` and ausgeliefert.referer = ansichten.referer and abs(unix_timestamp(ausgeliefert.timeCreated) - unix_timestamp(ansichten.timeCreated)) <= 20 ) WHERE ansichten.timeCreated >= '2013-03-21 00:00:00' and ansichten.timeCreated <= '2013-03-21 23:59:59'

Das ganze dauert extremst lang. Wie macht mans richtig?

lg

Ulla
 
Der JOIN selber sieht nicht gut aus, da es aber ein einfacher Join ist, lässt sich dies mittel WHERE-Klausel auch umsetzen, aber wo der Hase im Peffer begraben ist, wir man so nicht direkt finden können, dazu fehlen zu viele Informationen. Der Tabellenaufbau fehlt, die Indexe, eine grundlegende Ausgabe mit EXPLAIN.

Sehr stark frage ich mich aber was im Join die ABS()-Funktion bewirken soll, das ist doch kein Vergleich, damit hätte es nichts im Join zu suchen, ggf. wohl in der Ergebnisauswahl, aber dafür steht es an der falschen Stelle...
 
Ja das problem ist aber vermutlich dass das ganze 9.0000000000 Datenbankelemente wären die abzugleichen wären,.. Habe keine Ahnung wie mans macht, aber daran scheiterst du vermutlich,...
 
gehört folgendes nicht eher in die where clausel?

CODE and abs(unix_timestamp(ausgeliefert.timeCreated) - unix_timestamp(ansichten.timeCreated)) <= 20 )


oder probiers mal hiermit:

QUOTE SELECT * FROM ausgeliefert, ansichten WHERE ausgeliefert.session = ansichten.session and ausgeliefert.referer = ansichten.referer and (abs(unix_timestamp(ausgeliefert.timeCreated)-unix_timestamp(ansichten.timeCreated))<=20) AND ansichten.timeCreated >= '2013-03-21 00:00:00' and ansichten.timeCreated <= '2013-03-21 23:59:59'
 
Zurück
Oben