web-dev-qa-db-ja.com

nvarchar(50)とnvarchar(最大)の関係

以下の2つのテーブルの唯一の違いがnvarchar(50)nvarchar(max)であり、各フィールドの文字列が1〜50文字の範囲である場合、一般的なストレージとパフォーマンスの違いは何ですか?これはSQL Server 2005に含まれています。

表1

firstname nvarchar (50)
lastname nvarchar (50)
username nvarchar (50)

表2

firstname nvarchar (max)
lastname nvarchar (max)
username nvarchar (max)
21
James Nicholson

1〜50文字の文字列があることが保証されている場合、最大長Xの文字列に対して実行される同じクエリは、varchar(X)とvarchar(MAX)を使用するとより高速に実行されます。さらに、varchar(MAX)フィールドにインデックスを作成することはできません。

行の長さが8000文字を超えると、競合するパフォーマンスに関する追加の考慮事項があります(行は基本的にvarchar(n)ではなくTEXTとして扱われます)。ただし、長さが8000を超える文字列にはvarchar(N)オプションがないため、これは比較としてそれほど重要ではありません。

30
Ryan Nigro

何よりもまず、(最大)長さの列にインデックスを作成することはできません。したがって、検索可能なデータを格納する場合、つまりこれらの列がWHERE述語の一部になる場合は、クエリのパフォーマンスを向上させることができない場合があります。このような場合は、これらの列の全文検索とインデックスを検討する必要があります。

6
Sujai Sparks