2013-10-25 22 views
2

給定一個包含任意文本(其中包含字母標籤(#example,#alsoAnExample,#this-is-an-an-example)的列的源表),創建索引視圖在SQL服務器,針對Hashtags的SQL索引視圖

#標籤的正則表達式定義:

/\B#\w*[a-zA-Z]+\w*/ 

所需的視圖例如輸出:

PostId  | Tag 
    1   example 
    1   alsoAnExample 
    2   yetanothertag 

這會從責任中移除應用層建立連接在插入時嘗試插入常規表格,並允許從其他來源輸入數據而無需知道標記。

如果這是可能的,是否可以以插入的方式完成(Posts表插入很重)將不會導致顯着的負擔,因爲View索引需要經常更新。

+0

我認爲您需要查看完整我想這裏沒有索引視圖會爲你做任何事情 –

+0

Aaron,你爲什麼說它不會爲我自己做任何事情?類似於做一個全文索引,雖然我不需要所有的文本(這是大幾個數量級)。所以你建議我應該在應用層做? –

+0

索引視圖是使用WITH SCHEMABINDING選項創建的,也就是說視圖的內容是物理存儲的,而不是實時計算的。如果你仔細想一想,如果你想要對某些東西進行索引,這種方法是有道理的。如果源表插入繁重,則需要在源表中的每個新行上刷新索引視圖,這可能會導致性能問題。 – Lucian

回答

3

因爲每行可以有多個散列標記,所以顯然不能只使用計算列索引。相反,您在概念上希望擁有的是基表的索引視圖,該表視圖交叉應用了計算哈希標記的表值函數。我很想在SQL Server中擁有這些功能,但是索引視圖在它們所支持的功能方面極其有限。只是忘記他們的用例(並查閱網上書籍中的限制來理解爲什麼)。

相反,我建議您創建一個單獨的表來保存哈希標籤(形式(PostId INT PRIMARY KEY, Tag NVARCHAR(400) PRIMARY KEY, ...或類似)的,維持在應用層,它的表,或使用觸發器。

你也可以維持表格,以便您可以批量更新並在後臺執行它們,當然這意味着應用程序必須容忍陳舊的數據,這意味着更多的開發工作。

+1

好的答案,我想我會去觸發路線。我想這是關閉做一些研究。 –

+1

很高興知道您可以使用觸發器自行復制索引視圖的任何功能。性能會有所不同,並且會丟失企業版中的自動索引視圖匹配。但是你可以實現任何你喜歡的東西。 – usr