2012-04-18 38 views
0

是否可以不使用全文索引,我們可以根據關鍵字搜索巨大的表嗎?SQL Server搜索表中的數百萬行

我要搜索項Country man working並返回結果如下:

  1. 國家的人開始對失敗的邊緣工作
  2. 國家
  3. 人開始了他的工作
+3

爲什麼你不能使用全文索引?如果沒有它,使用LIKE或CHARINDEX語句對於這樣一個大型表格將會非常慢。 – 2012-04-18 09:55:47

回答

0

這應返回您要求的結果:

SELECT * 
FROM TABLE 
WHERE Field LIKE '%country%' 
OR Field LIKE '%man%' 
OR Field LIKE '%working%' 

速度雖然沒有保證......從註釋


注意事項 - 這真的不是這樣做的方法。全文索引是使用的方法,但是您沒有詳細說明爲什麼它不是一個選項。

+0

搜索不是那麼簡單,這個查詢將忽略所有的索引。我們需要更好的表現。 – 2012-04-18 10:32:08

+3

你問了一個沒有全文索引的方法。所以,在這裏。另一種方法是創建一個全文索引,這將是一個更好的方法。 – Paddy 2012-04-18 11:08:11

+0

但是用'LIKE'%man%''搜索表達式,你基本上正在做一個全表掃描 - 這將會在具有數百萬行的表上顯得**非常慢,因爲沒有索引可以被使用**永遠** ... – 2012-04-18 11:28:52

1

創建一個表來包含字典中的所有單詞,減去噪音詞。

創建一個表,詞典關鍵詞表鏈接到您的數據表

編寫一些代碼來創建鏈接表中的記錄,其中在字典中的單詞,你要搜索的表出現在文本列。

然後你就可以查了一下,像這樣:

SELECT T.TextStuff 
FROM KeywordTable AS K 
JOIN LinkTable AS L ON L.KeywordID = K.KeywordID 
JOIN TableToSearch AS T ON T.KeyWordID = L.KeywordID 
WHERE K.Keyword = 'Country' 
OR K.Keyword = 'man' 
OR K.Keyword = 'working' 

那僅僅是僞代碼,但希望它會驗證這個想法。耗時設置,但應該比做一堆LIKE更好。總結一下,你需要查看一張你每行有一個單詞的表格,那些匹配你希望在鏈接表格中找到的單詞,然後從那裏你可以得到原始表格中的記錄。