Mailinglisten-Archive |
Hallo Liste,
ich habe einen Join mit langer Laufzeit (>6 Sekunden)
trotz nicht allzu grossem Datenvolumen (Tabelle a: 992 DS, Tabelle b: 1196 DS).
Leider bin ich anscheinend nicht in der Lage, einen Index auf Tabelle a zu formulieren,
der die Laufzeit verkürzt.
explain select a.ARTIKELID, MEMBERID FROM ARTIKEL a
left outer join STRUKTUR b
on a.ARTIKELID=b.MEMBERID
and b.KATALOGID = 1
and b.STATUS = 'A'
where a.KATALOGID = 1
and a.LOKZ not in ('X')
and a.AKTIV = 'X'
and
(
(
(a.GUELVON / 1) <=20021104
and (a.GUELBIS / 1) >=20021104
and (a.SONDER in ('n')
or a.SONDER is null)
)
or
(
(a.SGUELBIS / 1) >=20021104
and (a.SGUELVON / 1) <=20021104
and a.SONDER in ('j')
)
)
Explain ergibt folgendes Bild:
table type possible_keys key key_len ref rows Extra
a ALL ARTIKELZUGRIFF NULL NULL NULL 992 where used
b ref STATUSINDEX STATUSINDEX 2 const 10
Der Index auf b scheint also in Ordnung z usein (war ja auch einfach) ...
Der Index ARTIKELZUGRIFF auf a, der keine Laufzeitverbesserung bringt, geht über die Felder
a.KATALOGID, a.LOKZ, a.AKTIV und a.SONDER
Hat jemand eine Idee? Oder liegt die lange Laufzeit lediglich daran, dass in zwei der WHERE Bedingungen ein CHARfeld zum Vergleich mit einer Zahl konvertiert werden muss ?
Freue mich über gute Ideen,
Viele Grüße,
Rüdiger
________________________________________________________________
Keine verlorenen Lotto-Quittungen, keine vergessenen Gewinne mehr!
Beim WEB.DE Lottoservice: http://tippen2.web.de/?x=13
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive