phpbar.de logo

Mailinglisten-Archive

wie kann das schneller werden...

wie kann das schneller werden...

Ulrich Seppi seppi at idealnet.com
Fre Mai 16 15:20:23 CEST 2003


Hallo,
ich suche jemanden der mir bei folgender Sache helfen kann:

Ich habe eine Tabelle in der ich eine n:m Beziehung zw.
2 Schlüsseln habe

ID -> Kodex
-------------
1	5
1	6
1	2
2	1
2	5
....

in dieser tabelle gibt es ca. 300000 einträge!
Jetzt muss ich alle ID herausfiltern welche bestimmte kodexe hat wobei
die kodexe und bzw. oder verknüpf sein können:

Beispiel:
- suche alle ID welche (kodex=5 oder kodex=6) und kodex=2 haben

Ich benutzer MySQL 4.1 folglich habe ich es mit folgender SQL-Anweisung
probiert:

select distinct ID
from (select distinct ID from tabelle where  kodex=5 or kodex=6) a2
inner join
(select distinct ID from tabelle where kodex=2) a1 on a2.ID=a1.ID

und es funktioniert. Jedoch benötigt diese SQL-Anweisung bei den 300000 DS
in tablle und
den Joins viel zu viel Zeit! Ich warte ca. 2 min auf das Ergebnis. Für einen
Suchmotor natürlich viel viel zu lange!

Jetzt frage ich mich ob ich das event. mit Benutzervariablen machen kann
damit
die subselects nich jedesmal neu ausgeführt werden:

select @liste1:=ID from tabelle where  kodex=5 or kodex=6;
selecg @liste1:=ID from tabelle where  kodex=2;
select distinct ID from tabelle where ID IN (@liste1] and ID IN (@liste2)

ich bekam diese idee durch http://www.mysql.com/doc/en/Variables.html (fast
ganz unten)

jedoch funkioniert dies nicht! ich bekomme in @liste1 und @liste2 keine
liste sondern
alles leere DS (=NULL).

Hat da jemand eine Idee wie ich das mit den Benutzervariabeln machen muss
damit es funktioniert,
bzw. kann mir jemand einen anderen Tipp geben wie ich die Sache schneller
machen kann.
Indexe usw. habe ich alles schon gesetzt. Die Tabelle wurde auch schon
optimiert!

danke
Uli








-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive