34

これが私の苦境です。

基本的に、未知の長さの文字を保持するためにテーブルに列が必要です。しかし、Sql Server で VARCHAR(MAX) または NVARCHAR(MAX) を列に使用すると、次のようなパフォーマンスの問題が発生する可能性があるかどうかに興味がありました。 10文字を格納します。ただし、その列に最大で数千文字、場合によっては 100 万文字になる可能性がわずかにありますが、これは予測できません。ただし、2GB の制限を超えないことは保証できます。

パフォーマンスの問題があるかどうか、またはこの問題を解決するためのより良い方法があるかどうかに興味がありました。

4

6 に答える 6

15

意図した目的のために varchar(MAX) データ型を使用する予定のように思えます。

MAX データ型のデータが 8 KB を超えると、オーバーフロー ページが使用されます。SQL Server 2005 は、ページにオーバーフロー インジケータを自動的に割り当て、他のデータ型を操作するのと同じ方法でデータ行を操作する方法を認識します。

さらに読むには、Books Online: char および varchar を参照してください。

于 2010-04-03T21:05:40.570 に答える
10

(およびvarchar(max)( およびnvarchar(max)) columns (although they can be included in them. But who would include a column in an index that could get to 2GB?!) so if you want to search on this value, you will do a scan each time unless you use full-text indexes. Also, remember that any report designer or presentation designer (web or otherwise) must assume that someone might put the Encyclopedia into that column and design around it. Nothing is worse than hearing "the users probably won't do X". If a user can do it, they will do it. If a user can put in a tome into a column, at some point they will. If they never should, then IMO, it makes more sense to cap the column size at some reasonable level and if a user tries to stuff more into that column that is allowed, it would elicit a discussion of whether they should be entering that value into that column in the first place.

于 2010-04-03T21:52:12.227 に答える
4

私はいくつかの問題を見てきました-特にvarchar(MAX)を返し、その後再キャストされないスカラー関数(とにかく、これらは一般的に恐ろしいです)で。たとえば、特別な関数CleanString(somevarcharmax)がvarchar(max)を返し、varchar(50)で呼び出すが、CAST(CleanString(varchar10col)AS varchar(10))を呼び出さないとします-厄介なパフォーマンスの問題。

ただし、通常、テーブルにvarchar(max)列がある場合は、これらの種類の操作をまとめて実行するべきではないため、テーブルのデータニーズに適切に使用している場合は問題ありません。 。

于 2010-04-03T21:57:29.663 に答える
4

先日、この記事を見ました。これは、varchar(n)列に対するvarchar(max)のパフォーマンスのかなり小さな遅れを示しています。おそらくあなたのために違いを生むには十分ではありません。ただし、そうであれば、別のテーブルを使用して、これらのいくつかの大きなテキストブロックを格納できます。小さなテキストをメインテーブルに残すこともできますが、フラグフィールドを追加して、新しいテーブルで大きなテキストを探すように指示することもできます。

于 2010-04-03T21:14:37.433 に答える
1

Crystal Reports 12 (および私が知る限り、他のバージョン) は varchar(max) を適切に処理せず、それを varchar(255) として解釈し、レポートのデータが切り捨てられます。

したがって、Crystal Reports を使用している場合、これは varchar(max) の欠点です。または、正確に言うと、Crystal を使用することの欠点です。

参照:
http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=5843&PID=17503
http://michaeltbeeitprof.blogspot.com/2010/05/crystal-xi-and-varcharmax-aka-memo.html

于 2010-09-01T13:30:49.407 に答える
-3

いいえ、varchar(max) はエントリのサイズに基づいて自動的に調整されるため、さまざまなサイズの入力を使用する場合に最も効率的です。

于 2010-04-03T21:09:50.780 に答える