2013-06-04 33 views
1

我想寫一個小博客引擎。我很想找到一個示例SQL Server架構來給我一些想法,但還沒有找到。如何在SQL Server 2012行中內聯存儲超過8000個字節的數據?

我想有一個博客表,允許我存儲超過8000字節的數據。誰能告訴我,如果一個好辦法做到這一點會與兩個字段是這樣的:

CREATE TABLE [Blog](
[BlogId] [int] IDENTITY(1,1) NOT NULL, 
[BlogText1] [nvarchar](8000) NOT NULL, 
[BlogText2] [nvarchar](8000), 
.. 

我在想什麼是文本存放在兩個領域,並有我的應用程序追加兩個字段的內容時,正在顯示數據,當存儲數據時,首先存儲在BlogText1中的xxx個字符,然後是存儲在BlogText2中的剩餘部分。

這是一個合理的事情要做還是應該只使用nvarchar(max)?

如果我使用nvarchar(8000)可以容納多少個字符?

我所關心的是檢索一行所需的時間。我是否正確地假設,如果我使用nvarchar(max),則檢索該行需要更長的時間。

+0

下面是一個示例模式http://codex.wordpress.org/Database_Description –

+0

使用'NVARCHAR(MAX)'並讓它首先工作。只有在它工作之後,您才能通過配置文件來測試列寬是否是性能瓶頸。我的猜測是,它不會,但直到應用程序運行後,你纔會知道。 –

+0

user2246674 - 您提到的超過8000個不能以內聯方式存儲。我認爲,在SQL Server 2012中,有大量的字節可能與行溢出一起存儲。是不是可以將這些> 8000存儲在多個字段中,而不必使用MAX就可以使用行溢出? – Alan2

回答

5

短版本 - 使用NVARCHAR(MAX),直到您確定存在明確的性能問題需要解決 - 嘗試手動分離大型博客條目以使其保存爲「內聯」幾乎肯定會導致比離開更差的性能它取決於SQL Server。


長版本 - SQL Server存儲數據高達8060箇中的字節大小的塊稱爲pages。通常,單個列的長度不能超過這個大小,但是某些大值類型(例如TEXT)可以專門處理,並且它們的值將替換爲指向其他地方存儲的實際數據的24字節指針(在ROW_OVERFLOW_DATA分配單元中)

NVARCHAR(MAX)數據類型實際上提供了一種混合方法 - 在數據足夠小的情況下,數據頁面中存儲的值與通常情況相同,但是當數據太大時,會無縫地轉換爲對你來說是一個很大的價值類型。這通常意味着你得到兩全其美。

相關問題