phpbar.de logo

Mailinglisten-Archive

Re: left join
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: left join



Hallo Bernd,

ein paar Ergänzungen:

> > ich experimentiere gerade etwas herum und habe folgende Tabellen:
> >
> > 1. artikel:
> > art_nr  int(10) unsigned

PK art_nr

> > 2. sent:
> > ku_nr   varchar(20)
> > art_nr  int(10) unsigned

PK (ku_nr,art_nr)


Die Aufgabe war, für jeden Kunden die Artikel herauszubekommen, die er 
noch nicht verschickt bekommen hat. In der Tabelle "sent" stehen alle 
Artikel, die ein bestimmter Kunde schon erhalten hatte. Dazu verwendete 
ich diesen LEFT JOIN.

SELECT artikel.art_nr
FROM artikel
LEFT JOIN sent
ON (sent.art_nr=artikel.art_nr AND sent.ku_nr=1)

Diese Abfrage ist relativ schnell, so lange die Tabelle leer ist. Gibt es 
in der Tabelle "sent" viele Einträge, dann dauerte die Abfrage extrem 
lange.

Das Problem konnte ich jetzt etwas einschränken. Es scheint an den Key's 
zu liegen. Mit folgender Konstruktion ist es deutlich schneller:

-- tabelle sent --
sent_id     INT UNSIGNED NOT NULL AUTO_INCREMENT,
ku_nr       VARCHAR(20) NOT NULL,
art_nr      INT UNSIGNED NOT NULL,

...

PRIMARY KEY(sent_id),
KEY(ku_nr),
KEY(art_nr)


Damit fühle ich mich aber nicht mehr so wohl, da zu mindestens 
theoretisch folgende Kombinationen möglich sind:

1,'0815',1
2,'0815',1

Jeder Kunde kann aber nur einmal einen bestimmten Artikel haben. Daher 
hatte ich mich für den obigen PK entschieden.

Kannst Du mir evtl. helfen und einen Tip geben, wo ich einen Denkfehler 
habe?

Bye
	Heiko

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive