In dieser Frage hat er das gleiche Problem wie ich. Ich brauche so etwas wie:
select * from blablabla
where product
like '%rock%' or
like '%paper%' or
like '%scisor%' or
like '%car%' or
like '%pasta%'
Dies ist hässlich und verwendet keine Indizes. In diesem Fall ist dies wirklich die einzige Möglichkeit, dies zu tun (um mehrere Wörter innerhalb einer Zeichenfolge auszuwählen), oder sollte ich FULLTEXT verwenden?
Soweit ich weiß, kann ich mit Volltext mehrere Wörter innerhalb einer Zeichenfolge auswählen.
sql-server
sql-server-2008-r2
full-text-search
Racer SQL
quelle
quelle
Antworten:
Volltextindizes sind im Allgemeinen kein Wundermittel und erfordern zusätzliche Wartung, Speicherplatz und ziemlich aufdringliche Änderungen an Abfragemustern.
Wenn Sie nicht wirklich große Dokumente indizieren müssen (denken Sie an E-Mail-Textkörper, PDFs, Word-Dokumente usw.), sind sie übertrieben (und wenn wir ehrlich sind, würde ich diesen Prozess vollständig und vollständig aus SQL Server entfernen benutze Elasticsearch oder ähnliches).
Für kleinere Anwendungsfälle sind berechnete Spalten im Allgemeinen ein besserer Ansatz.
Hier ist eine kurze Demo-Einrichtung:
Abfragen, die sogar auf einer nicht persistenten Spalte basieren, geben uns einen Plan, der 'Indizes' und alles verwendet :)
quelle
Die Antwort von sp_BlitzErik trifft auf viele gute Punkte, aber ich denke nicht, dass Sie deshalb die Volltextsuche nicht verwenden sollten. Die Volltextsuche ist nicht dazu da, das zu tun, was Sie denken. Es ist nicht da, um mehrere Felder zu durchsuchen. Es dient dazu, Wortinhalte zu vektorisieren und Wörterbücher, Stubbing, Lexer, Gazetteer, die Beseitigung von Stoppwörtern und eine Reihe anderer Tricks zu verwenden, von denen keiner zutrifft. Oder es wurde noch nicht nachgewiesen, dass sie zutreffen.
Ich bin auch nicht mit der Lösung einverstanden, obwohl ich nicht sicher bin, wie ich dies in SQL Server besser machen kann. Lassen Sie uns seine Daten für PostgreSQL neu erstellen - es ist viel sauberer, sie auch in PostgreSQL zu erstellen.
Was Sie jetzt wollen, ist ein Aufzählungstyp,
Jetzt haben Sie die Zeichenfolgen zu ganzzahligen Darstellungen reduziert. Aber noch besser können Sie sie wie zuvor abfragen.
Dies hat den Effekt.
Ohne diese Vorteile versuchen Sie im Wesentlichen nur, den Zeichenfolgenvergleich zu optimieren. Aber leider bin ich mir nicht einmal sicher, wie sp_BlitzErik zu der Antwort kommt, wenn der Code im Vorschlag angegeben ist.
Sie können die Token mithilfe einer Aufzählung oder der von sp_BlitzErik vorgeschlagenen Hand-Rolling-Methode auf Ganzzahlen reduzieren, aber wenn Sie das Reduzieren durchführen können, warum machen Sie das auch nicht verankert? Dh wenn Sie wissen, dass '% pasta%' das Zeichen 'Pasta' ist, warum haben Sie das
%
auf beiden Seiten? Ohne '%' ist dies eine Gleichheitsprüfung und sollte auch als Text ziemlich schnell sein.quelle