Mailinglisten-Archive |
Hallo Nikolas, > -----Original Message----- > From: Nikolas Hagelstein [mailto:hagelstein at hauptsache.net] > SELECT awa.*,awe.wbez,awe.kurz FROM artdata_web awe,artdata_wavi > awa WHERE > awa.artnr_neu=awe.artnr_neu and (awe.wbez LIKE '%xx%' OR awe.kurz LIKE > '%xx%' OR awe.artnr_neu like '%xx%' OR awa.artnr_alt like '%xx%') ; > > Indiziert habe ich alle 'like' felder sowie artnr_neu. > > Aber selbst wenn ich alle keys wieder loesche fuehrt das zu > keinem nennenswerten unterschied ?! Ja ein grundlegendes SQL-Problem :). Ein Index hilft bei Verwendung von Like nur bei "like 'wert%'", sprich: Der Anfang des zu suchenden Wertes muß bekannt sein. Das was eine (jede) SQL-Datenbank bei "like '%wert%'" macht, nennt sich "Tablescan". D.H. die komplette Tabelle wird durchsucht. Wieso? Stell Dir einen Index stark vereinfacht als sortierte Liste (Telefonbuch etc.) vor. Bei einer Suche darin ist es extrem hilfreich, wenn man bereits den ersten Buchstaben kennt, aber überhaupt nicht hilfreich, wenn der zweite und dritte Buchstabe bekannt ist. Abhilfe: Schau, daß Du es auf like 'wert%' oder sogar = 'wert' bringst. (ggf. einmal mit like 'wert%' abfragen und wenn keine Treffer, dann der langsame Weg mit '%wert%') Der Volltextindex hilft in diesem Fall auch nicht weiter, denn der findet auch nur ganze Wörter (also nicht in einem Wort) und ist natürlich auch auf Texte optimiert und nicht auf Artikelnummern. Gruss, Michael Donning -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive