Mailinglisten-Archive |
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
php::bar PHP Wiki - Listenarchive