2012-11-06 49 views
2

我有一個SQL Server 2005數據庫,其中有一個包含4000萬條記錄的表。每條記錄都包含一個存儲逗號分隔的關鍵字列表的列。每個關鍵字都是字母和數字的組合。關鍵字長達7個字符,平均每條記錄有15個關鍵字。關鍵字在行之間不唯一。在40M文本記錄上快速SQL Server搜索

我想搜索全部或部分關鍵字。

我創建了顯示328,245,708唯一鍵數的全文索引。搜索效率罰款(在測試機上圍繞爲100ms)的4個或更多字符的查詢,但對於具有3點或更少的字符(最多三分在測試機器上)查詢太慢。

我一直在試圖用類似的結果排序'[query]*'兩個CONTAINSTABLECONTAINS查詢。

我認爲短查詢的性能比較慢,因爲短詞在不同記錄中更頻繁地重複。

排序結果並不重要,我一直試圖返回TOP X結果排序從CONTAINSTABLE排名。這不能提供所需的性能。

如何使短搜索的搜索速度更快?

+0

我會重建表結構,使用關鍵字的新表,並使用一個外鍵 –

+0

我與t-clausen.dk指回主鍵原始表。您可以爲每個不同的關鍵字創建一個具有ID的表格,然後使用rowID/KeywordID對創建一個表格,並在現有表格和對錶格之間創建一對多關係。 – Beth

+0

相比於關鍵字列上的全文索引,性能會有所提升嗎?同樣,我會在搜索時遇到重複結果的可能性問題。 – mrt

回答

1

您可能希望將它網關到SOLRSphinx之類的東西,並讓專門的文本搜索引擎處理搜索功能。

+0

與Sql Server全文索引比較,我應該期待什麼樣的性能增益範圍 – mrt

+0

@MRT在這種情況下,快速谷歌(或bing)搜索可能會有用嗎? – hd1

+0

您如何建議我爲此目的使用Google搜索? – mrt

3

另一種選擇是考慮正常化表的結構,這樣你就會有你的數據記錄在一個表中,你的標籤在另一個表中,關聯表標籤涉及到的數據記錄。這將允許您針對標籤執行文本搜索,並簡單地加入關聯表以檢索相關記錄。

+0

與關鍵字列上的全文索引相比,它會有什麼性能優勢嗎? – mrt

+0

當然。將標籤分成單獨表格的另一個好處是您可以在標籤名稱上創建索引。這可能會對文本搜索產生最深遠的影響。 – Nathan

+1

難道不是如何全文索引背後的字 - 創建一個查找表與所有標籤(單詞)? – mrt