MarkusS Geschrieben 22. Januar 2007 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?
Jasper Geschrieben 22. Januar 2007 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
MarkusS Geschrieben 22. Januar 2007 Autor 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...
Jasper Geschrieben 22. Januar 2007 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
MarkusS Geschrieben 22. Januar 2007 Autor 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)
Jasper Geschrieben 23. Januar 2007 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
MarkusS Geschrieben 23. Januar 2007 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden