Sql-Server

“喜歡或喜歡,或喜歡,或喜歡,或喜歡”的更好方法

  • March 15, 2020

在這個問題上,他和我有同樣的問題。我需要類似的東西:

select * from blablabla 
where product 
like '%rock%' or
like '%paper%' or
like '%scisor%' or
like '%car%' or
like '%pasta%' 

這很難看,它沒有使用索引。在這種情況下,這確實是唯一的方法(在字元串中選擇多個單詞),或者我應該使用 FULLTEXT?

據我了解,使用全文,我可以在字元串中選擇多個單詞。

這個問題也談到全文

全文索引通常不是靈丹妙藥,需要額外的維護、磁碟空間以及對查詢模式進行相當侵入性的更改。

除非您真的需要索引大型文件(想想電子郵件正文、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)

甚至基於非持久列的查詢為我們提供了一個“使用索引”和所有內容的計劃:)

SELECT COUNT(*)
FROM #fulltextindexesarestupid AS f
WHERE LessBad = 1

堅果

引用自:https://dba.stackexchange.com/questions/182603