Sql-Server

JSON 的最佳 SQL 數據類型

  • June 27, 2018

在 SQL Server 2016 中,我認為處理 JSON 的最佳數據類型是nvarchar. 我們的大多數 JSON 字元串不會使用超過 100 個字元。我應該使用nvarchar(100)ornvarchar(max)嗎?

我們更喜歡nvarchar(100). 我只是想確保新的JSON 函式沒有使用該max類型的偏好。Max儲存在行之外並且在性能方面效率略低。

您連結到的文件連結到JSON 頁面,其中顯示:

JSON 是一種文本格式,因此 JSON 文件可以儲存在 SQL 數據庫的 NVARCHAR 列中。

等一下……我認為這個文件需要一個拉取請求:)

無論如何…與往常MAX一樣,如果您不需要它,請不要使用它!你是對的,它會導致(輕微的)性能下降,SQL Server 絕不喜歡NVARCHAR(MAX)JSON 儲存。認為自己很幸運,您儲存瞭如此小的 JSON。

目前支持

目前,僅支持文本類型。Microsoft SQL 建議NVARCHAR(max)儲存。

二進制 JSON

Microsoft SQL 目前沒有二進制 JSON 類型。所以你得到的只是經過驗證的文本,本機。或者,您可以使用 C# CLR UTD 連結到 JSON.net。來自微軟部落格

如果您認為 PostgreSQL 中的 JSONB 格式或壓縮 JSON 文本等壓縮格式是更好的選擇,您可以在 UDT 中解析 JSON 文本,將其作為 JSONB 儲存在 CLR UTD 的某些二進制屬性中,並創建可以使用該屬性的成員方法格式。

他們接著說,

目前我們還沒有發現有人嘗試創建封裝 JSONB 格式的 CLR UDT,所以我們不會在這個版本中進行這種實驗。

這聽起來並不令人鼓舞。部分問題是他們從文件中看不到需要它。

我們的重點將是提供良好的功能和查詢優化,而不是儲存。我們知道 PostgreSQL 具有原生類型和 JSONB 支持,但我們仍然不知道這是否比 CLR 替代方案更快或更好,所以在這個版本中,我們希望專注於其他更重要的事情(你想看 SQL具有本機類型但沒有處理 JSON 的內置函式的伺服器——我不這麼認為🙂)。但是,我們願意接受建議,如果您認為可以替換 CLR JSON 或純文字的本機類型會有所幫助,您可以在連接站點上創建請求,以便我們在那裡討論。同樣,我們選擇從 FOR JSON 和 OPENJSON 開始的事實是,這些功能是在 JSON 連接項中請求的,並且可能只有那些不能用 CLR 輕鬆實現的東西。

部分原因是像 MySQL 開發人員一樣,SQL Server 開發人員不了解二進制類型的優點,包括:

  1. 索引。
  2. 儲存大小。
  3. 單一驗證。二進制類型是停止函式重新驗證的方法。

他們說,

因此,我們的重點是導出/導入和一些用於 JSON 處理的內置函式。有人可能會說 - 這還不夠快,但我們會看到。一旦我們發布功能並在需要時提高性能,我們將討論性能。但是,請注意,內置 JSON 解析器是在數據庫層處理 JSON 的最快方式。您可以使用 CLR 類型或 CLR 解析器作為外部程序集,但這並不比解析 JSON 的本機程式碼更好。

這基本上只是tldrC# 速度較慢,它們在 C++ 中的“本機程式碼”在解析時會更快,但在儲存和檢索時不會。

備擇方案

如果您需要二進制 JSON 類型,請考慮使用 PostgreSQL。它被微軟自己多次引用,它也是免費和開源的。

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