Rac*_*SQL 10 sql-server full-text-search sql-server-2008-r2
在这个问题上,他和我有同样的问题。我需要类似的东西:
select * from blablabla
where product
like '%rock%' or
like '%paper%' or
like '%scisor%' or
like '%car%' or
like '%pasta%'
Run Code Online (Sandbox Code Playgroud)
这是丑陋的,它没有使用索引。
据我了解,使用全文,我可以在一个字符串中选择多个单词。
Eri*_*ing 17
全文索引通常不是灵丹妙药,需要额外的维护、磁盘空间和对查询模式的相当侵入性的更改。
除非你真的需要索引大型文档(想想电子邮件正文、PDF、Word 文档等),否则它们是多余的(如果我们说实话,我会完全从 SQL Server 中删除这个过程,并且使用 Elasticsearch 或类似的东西)。
对于较小的用例,计算列通常是更好的方法。
这是一个快速演示设置:
use tempdb
CREATE TABLE #fulltextindexesarestupid (Id INT PRIMARY KEY CLUSTERED, StopAbusingFeatures VARCHAR(100))
INSERT #fulltextindexesarestupid (Id)
SELECT TOP 1000000 ROW_NUMBER() OVER (ORDER BY (@@ROWCOUNT))
FROM sys.messages AS m
CROSS JOIN sys.messages AS m2
UPDATE #fulltextindexesarestupid
SET StopAbusingFeatures = CASE WHEN Id % 15 = 0 THEN 'Bad'
WHEN Id % 3 = 0 THEN 'Idea'
WHEN Id % 5 = 0 THEN 'Jeans'
END
ALTER TABLE #fulltextindexesarestupid
ADD LessBad AS CONVERT(BIT, CASE WHEN StopAbusingFeatures LIKE '%Bad%' THEN 1
WHEN StopAbusingFeatures LIKE '%Idea%' THEN 1
ELSE 0 END)
CREATE UNIQUE NONCLUSTERED INDEX ix_whatever ON #fulltextindexesarestupid (LessBad, Id)
Run Code Online (Sandbox Code Playgroud)
甚至基于非持久性列的查询为我们提供了一个“使用索引”和所有内容的计划:)
SELECT COUNT(*)
FROM #fulltextindexesarestupid AS f
WHERE LessBad = 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15720 次 |
最近记录: |