phpbar.de logo

Mailinglisten-Archive

[php] Mysql - Suche mit Wildcards

[php] Mysql - Suche mit Wildcards

Matthias P. Wuerfl php_(at)_trullala.de
Tue, 28 Nov 2000 00:22:32 +0100


Martin Abraham schrub:

>Welche Abrage ist die schnellere?
>
>1. SELECT * FROM veranstaltungen2000 where rid=1 AND titel LIKE
>"%XYZ%"; 
>
>2. SELECT * FROM veranstaltungen2000 WHERE rid=1 HAVING titel
>LIKE "%XYZ";
>
>Meine Erfahrung ist, daß Abfrage 1 schneller ist, aber wieso?

1 sucht sich zuerst die raus, die rid=1 haben. Das geht schnell 
(weil "="). Anschliessend werden von den verbleibenden Datensatzen 
die genommen, bei denen titel like "%xyz%" ist. Das dauert lange, 
muss aber nicht mehr auf so viele DS angewendet werden.

2 sollte eigentlich genau das gleiche machen. Joch halte ich es fuer 
denkbar, dass MySQL sich bei "having" erst einmal Gedanken ueber 
irgendwelche Aggregatsfunktionen macht und ein "group by" sucht. Ob 
es vielleicht dadurch langsamer wird?

Was Du machen willst ist 1. 2 ist eine bloese Konstruktion.

>2. Frage:
>
>Ist es überhaupt ratsam so eine Suche über MYSQL durchzuführen?

Nein. Wenn Du es irgendwie hinbekommst, dass Du bei Deinem like das 
erste "%" weglassen kannst, dann ja. Durch das % vor dem Suchwort 
kann MySQL keinen Index benutzen und rennt wie bescheuert durch die 
Tabelle auf der Suche nach dem Wort. Das dauert. MySQL ist dafuer 
nicht gemacht.

>3. Frage:
>
>Wenn mehrer Benutzer ungefähr gleichzeitig eine Abfrage
>ausführen, wie arbeitet MYSQL diese ab
>(hintereinander/nebeneinander)? 

zweites.

Gruss, Matthias


php::bar PHP Wiki   -   Listenarchive