# LIKE vs. CONTAINS (MSSQL 2000)



## Andreas Dunstheimer (8. November 2007)

Hallo Leute,

ich habe ein kleines Problem, und hoffe ihr könnt mir helfen, oder vielleicht einen Tip geben.

Ich arbeite im Moment an einem Projekt, wo ich über ein Webinterface den Inhalt einer Tabelle durchsuche. Da die Suche mit LIKE %suchstring% recht langsam ist, habe ich es über den Volltextindex vom MS SQL-Server versucht, komme aber zu einem recht unbrauchbaren Ergebnis.

Ok, hier die Details:

Ich benutze *MS SQL-Server 2000 mit SP3 *(daran wird sich leider auch so schnell nichts ändern)

*SELECT DVDDB_Dateien_DatentraegerID 
FROM DVDDB_Dateien 
WHERE DVDDB_Dateien_langname LIKE '%serie%'*

Dieser SQL-String bringt mir 512 Treffer, braucht aber einige Sekunden.

*SELECT DVDDB_Dateien_DatentraegerID 
FROM DVDDB_Dateien 
WHERE CONTAINS( DVDDB_Dateien_Langname, '"*serie*"')*

Dieser SQL-String ist bedeutend schneller (nur wenige Millisekunden), liefert aber leider nur 6 Treffer.


*Der Volltextindex ist vollständig. Es sind alle Einträge der Tabelle DVDDB_Dateien enthalten.*


Wieso funktioniert der zweite String nicht richtig? Laut MSDN sollte das gehen (auch mit MS SQL-Server 2000) !


Gruß Dunsti


----------



## Thomas Darimont (8. November 2007)

Hallo,

wenn du mit einem Volltextindex ein where a Like %XXX% durch einen entsprechenden Contains Aufruf ersetzen willst kannst du:
where Contains(a,'XXX') schreiben. (Ohne * und %).

Siehe:
http://www.aspheute.com/artikel/20000703.htm

Gruß Tom


----------



## ByteBandit (9. November 2007)

... auch wenn das in dem Artikel so da stehen mag, ohne * wird er nix finden, wo das Wort nicht alleine steht... d.h. ein * davor und dahinter ist legitim (habs eben mal getestet).

Ganz interessant übrigens: Daß man dort einen * benutzen muss und kein % funktioniert ist laut Microsoft ein Bug und nicht gewollt <g>.


----------



## Andreas Dunstheimer (12. November 2007)

Hi,

laut Microsoft Knowledgebase sollen da aber * hin 

siehe hier: http://support.microsoft.com/kb/203195 
(Dort wird auch geschrieben, daß % eigentlich gehen sollte, diese aber aufgrund eines Bugs nicht gehen, und man stattdessen eben * verwenden soll)


Hat noch jemand ne Idee?


Dunsti


----------

