Sql-Server

儲存包含 guid 的 json 的列的全文索引 - 從空間上講,這是個好主意嗎?

  • October 3, 2020

我正在考慮為值為 json 字元串的列添加全文索引。這些 json 通常包含Guid(或UUID)值。

索引的目標是允許對“普通”單詞(例如,一些使用者生成的文本)和 guid 進行快速搜尋。

有關此專欄的更多資訊,稱為RequestContent

  • 我實際上還有另一列,ResponseContent,以下內容也適用,因此我認為這個問題的答案也適用於它。

此列本質上用作 HTTP Post 請求正文的日誌,以便每個傳入的 POST 請求正文都記錄到該列中。有數百個 Web 服務的請求主體被記錄,兩個不同的 Web 服務請求之間沒有關係。

例如,一個請求可能如下所示:

{ "orderId": "607bbc9b-9c0e-4921-b5c3-55f68891e619", "status": 0, "createdOn": 16011560804216 ... }

而另一個可能看起來像:

{ "claimStatus": 1, "actionStatus": 8, "senderId": "807acc23-9dde-4aaa-b5c3-55df5431e619", "documents": [ { "documentTitle": "some free text" }] ... }

任何 json 都可能包含任何類型的欄位:number、短string欄位(例如firstName,或 Guid 等)或長string欄位(通常包含數百個單詞的自由文本,但有時甚至是大型 Base64 編碼數據)boolean、、嵌套對象、數組。如果重要的話,可以肯定地說大多數請求(我會說 80%)包含numberstring欄位。

此列的類型是ntext(是的,它很舊),但我可以將它重新創建為我想要的任何其他類型。

為該列建立全文索引是個好主意嗎?我擔心的是索引會為每個 unique 包含一行Guid,這會導致佔用不可行的磁碟空間。

編輯:@David Spillett 問:

您能否將要索引的部分提取到持久計算列中,然後可以為其添加全文索引?

這在技術上是可行的,但我正在尋找目前案例的答案。

… 值為 json 的列的全文索引 … 通常包含 Guid(或 UUID)值。

為該列建立全文索引是個好主意嗎?

我會說“不”。

全文索引使該欄位中的所有單詞都可用於搜尋。我不認為那是你想要的。您希望能夠搜尋那些 Guid/Uuid 值以及可能的特定請求類型。

我的偏好是將這些值單獨提取到單獨的欄位中並為其編制索引。

如果做不到這一點,請使用支持 JSON 的索引類型,這會更好,但仍比單獨的欄位慢。

它會工作得很好。尺寸和性能是否值得?這取決於太多的事情。為什麼不在測試伺服器上創建該死的東西?

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