0

ISBN 列を検索して、部分一致が返されるようにする必要があります。LIKE の使用は正確ですが、非常に遅く、約 2 ~ 3 秒です。

select * from Isbns where isbn like '%1234567890123%'
-- returns 1 result: 1234567890123

select * from Isbns where isbn like '%12345678%'
-- returns 2 results: 1234567890123, 1234567811111.

フルテキスト インデックスを使用すると、検索は瞬時に行われますが、返される結果が多すぎます。

select * from Isbns where freetext(isbn, '"1234567890123"')
-- returns thousands of results, such as the exact match of 1234567890123, 
-- but also fuzzy matches such as: 1234567770123, 1234567778883, etc.

主な違いは、LIKE は用語の先頭と末尾のワイルドカードに基づいて一致するのに対し、FREETEXT (および CONTAINS) は、"". ほとんどすべての ISBN は同じ少数の数字で始まり、その後の数字にほとんど差異がないため、あまりにも多くの一致が返されています。

FREETEXT または CONTAINS を LIKE と同様に実行する方法、またはフルテキスト インデックスを利用して検索する他の方法はありますか?

4

1 に答える 1

0

すべての ISBN が同じ少数の数字で始まる場合は、文字列の先頭にあるワイルドカードを省略します。

select *
from Isbns
where isbn like '12345678%';

次に、 に索引があることを確認してくださいisbns(isbn)。多くのデータベースはlike、定数で始まる場合に最適化します。

于 2013-08-30T15:24:14.200 に答える