phpbar.de logo

Mailinglisten-Archive

Performance noch steigerbars ?

Performance noch steigerbars ?

Michael Donning donning at informenta.de
Mon Feb 3 13:19:24 CET 2003


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