21

タグシステムで使用する単語がたくさんあるデータベースがあります。オートコンプリートボックスに必要なコードを作成しましたが、データベースから一致するエントリを最も効率的な方法でフェッチする方法がわかりません。

私はLIKEコマンドを知っていますが、それはEQUALコマンドに近いように思えます。入力した単語とまったく同じ単語しか取得できません。

私の計画では、すべての行を読み取り、C#のstring.StartsWith()関数とstring.Contains()関数を使用して、適合する単語を検索しますが、大規模なデータベースでは、すべての行を読み取り、次に、それらをフィルタリングします。

SQL Serverから特定の文字列で始まる、またはその文字列を含む行のみを読み取る方法はありますか?

4

4 に答える 4

41

likeを使用する場合は、ワイルドカードとして%記号を指定します。Helloで始まる文字列が必要な場合は、LIKE'Hello%'を使用します。文字列のどこかにHelloが含まれる文字列が必要な場合は、LIKE'%Hello%'を使用します。

効率に関しては、Likeの使用は最適ではありません。全文検索を調べる必要があります。

于 2010-07-27T17:02:23.020 に答える
12

私はLIKEコマンドを知っていますが、それはEQUALコマンドに近いように思えます。入力した単語とまったく同じ単語しか取得できません。

これは、ワイルドカードを使用していないためです。

WHERE column LIKE 'abc%'

...column値が「abc」で始まる行を返します。columnワイルドカードを使用する場合、これが...er列のインデックスを使用できる唯一のバージョンであることを指摘しておきます。

WHERE column LIKE '%abc%'

...column値に「abc」が含まれる行を返します。LIKEの左側をワイルドカード化すると、インデックスを使用できないことが保証されます。

SQL Serverは正規表現をネイティブにサポートしていません。機能にアクセスするには、CLR関数を使用する必要があります。ただし、LIKEと同等のパフォーマンスを発揮します。

全文検索(FTS)は、テキストを検索するための最良の手段です。

于 2010-07-27T17:04:19.333 に答える
6

次のステートメントを使用して、StartWith機能を実装することもできます。

LEFT('String in wich you search', X) = 'abc'

CHARINDEX('abc', 'String in wich you search') = 1

'String in wich you search' LIKE 'abc%'

最高のパフォーマンスを発揮するものを使用してください。

于 2016-09-07T06:57:22.590 に答える
3

T-SQLで使用できますCONTAINSが、クエリに含まれるテーブルにフルテキストインデックスを使用する必要があると確信しています。

含まれています

全文検索の開始

于 2010-07-27T17:04:02.270 に答える