Zum Inhalt springen

richtige Abfrage


MarkusS

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...