MarkusS Geschrieben 22. Januar 2007 Teilen Geschrieben 22. Januar 2007 ich habe zwei tabellen: tb_1 id(int 3), IP_Ziel (varchar 15),daten (bigint 15) tb_2 id (int 3), IP_Adresse (varchar 15), KSt (varchar 10),Kunde (varchar 40) in tb_1 stehen daten passend zu einer IP, über die IP will ich einen JOIN mit tb_2 machen die dort zu einer KSt passt, am ende will ich wissen welche KSt wieviele Daten hat: SELECT tb_1.IP_Ziel,tb_2.IP_Adresse,tb_2.KSt,tb_2.Kunde,SUM(tb_1.daten) FROM `tb_1` LEFT JOIN `tb_2` ON tb_1.IP_Ziel=tb_2.IP_Adresse GROUP BY tb_1.IP_Ziel is dass von der logik her richtig? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 22. Januar 2007 Teilen Geschrieben 22. Januar 2007 is dass von der logik her richtig? syntaktisch ja. ob logisch korrekt, hängt von der natur von den IPs ab. die müssen natürlich irgendwie matchen. der left join ist auch korrekt, so bekommst du als zugabe allen traffic, der keiner kst-ip zugeordnet werden kann. -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarkusS Geschrieben 22. Januar 2007 Autor Teilen Geschrieben 22. Januar 2007 syntaktisch ja. ob logisch korrekt, hängt von der natur von den IPs ab. die müssen natürlich irgendwie matchen. der left join ist auch korrekt, so bekommst du als zugabe allen traffic, der keiner kst-ip zugeordnet werden kann. -j das Problem ist, das die Originaltabellen riesig (300000 und 40000 Datensätze) sind, d.h. die Abfrage dauert... Deshalb habe ich mir jeweils nur einen kl. Ausschnittt geschnappt, und es gab nur 1 match, kann sein dass gerade in dem ausschnitt nur ein match vorkommt. ich wollte nur bevor ich die große abfrage abwarte wollte ich erst einmal testen und nachhaken... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 22. Januar 2007 Teilen Geschrieben 22. Januar 2007 das Problem ist, das die Originaltabellen riesig (300000 und 40000 Datensätze) sind, d.h. die Abfrage dauert... 300k und 40k würde ich nicht gerade riesig nennen. welches dbms ist denn im einsatz? sind die am join beteiligten spalten indiziert? -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarkusS Geschrieben 22. Januar 2007 Autor Teilen Geschrieben 22. Januar 2007 300k und 40k würde ich nicht gerade riesig nennen. welches dbms ist denn im einsatz? sind die am join beteiligten spalten indiziert? -j dbms: MySQL wenn ich die betreffenden Spalten (tb_1.IP_ziel, tb_2.IP_Adr)indizieren will, dauert das ewig (stunden!) oder ich mache was falsch. phpmyAdmin betreffende Spalte bei Aktion indizieren. per sql-Abfrage (... ADD INDEX (IP_Adr));habe ich es noch nicht versucht, wird wahrscheinlich auf selbe rauskommen, ich muss die komplette spalte indizieren (komplette IP) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 23. Januar 2007 Teilen Geschrieben 23. Januar 2007 dbms: MySQL wenn ich die betreffenden Spalten (tb_1.IP_ziel, tb_2.IP_Adr)indizieren will, dauert das ewig (stunden!) oder ich mache was falsch. ohne indexing wird der join sehr teuer, da beide tabellen komplett gelesen werden müssen. wenn alleine das indizieren so lange dauert, dauert der join mindestens! ebenso lange. ich kann mir aber nicht vorstellen, dass mysql beim indizieren derartig langsam ist. oracle indiziert 400k zeilen in 5s, mysql dürfte ähnlich schnell sein. ich würde in der mysql-config und im plattensubsystem die ursache suchen. -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarkusS Geschrieben 23. Januar 2007 Autor Teilen Geschrieben 23. Januar 2007 ohne indexing wird der join sehr teuer, da beide tabellen komplett gelesen werden müssen. wenn alleine das indizieren so lange dauert, dauert der join mindestens! ebenso lange. ich kann mir aber nicht vorstellen, dass mysql beim indizieren derartig langsam ist. oracle indiziert 400k zeilen in 5s, mysql dürfte ähnlich schnell sein. ich würde in der mysql-config und im plattensubsystem die ursache suchen. -j also lag warscheinlich an meinem mysql server, hab in neu gestartet und siehe da die indizierung war in ein paar sekunden gegessen und die abfrage funzt jetzt auch so wie sie soll, danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.