
こんにちは、いつも参考にさせていただいております。
通常1レコードのバイト数の上限は8060ですが、
それがSQLServer2008あたりから緩和されたと聞きました。
そこでマイクロソフトのTechNetを見ましたがよくわかりませんでした。
2つわからない点がありますのでご教授どうかお願いいたします。
◆疑問点(1)◆
↓で8060バイト上限が緩和できそうだと思った中での疑問です。
マイクロソフトのTechNet
「8 KB を超える場合の行オーバーフロー データ」
http://msdn.microsoft.com/ja-jp/library/ms186981 …
「これら(varchar 型、nvarchar 型、varbinary 型、sql_variant 型、またはCLR ユーザー定義型)の列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの制限を超えることができます。」
わからないのは、上記文章中にある「組み合わせた場合」というポイントです。
○varchar 型とnvarchar 型、varbinary 型とsql_variant 型というように違う種類を組み合わせなければ8060バイト制限が越えられないのでしょうか?
◆疑問点(2)◆
「8 KB を超える場合の行オーバーフロー データ」ページ内でntext型などについての注意書きがありました(下記)。
それについての疑問です。
「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」
○ntext型とvarchar 型等との組み合わせの場合、8060バイト制限は関係ないのでしょうか?
(というよりntext型などは8060バイトレコード上限が関係ない?)
「text 型データと image 型データの使用」
http://msdn.microsoft.com/ja-jp/library/ms189574 …
どうかご教授・ヒントなどいただけないでしょうか。
よろしくお願いいたします。
補足など必要でしたらコメントください。
No.4ベストアンサー
- 回答日時:
#2です。
>おっしゃっていることをまとめてみたのですが↓であっていますでしょうか?
>・新設されたvarchar(max) 型などのLOBは1列ごとに16バイト、1行で最大500バイトまでのポインタを保持する
>・従来のままの型で1行で8Kを超える場合1行全体で24バイトのポインタを保持する
・新設されたvarchar(max) 型などのLOBは1列ごとに16バイトのポインタを保持するが、先頭部分をデータエリア内に保持するというオプションを指定すると、最大500バイトまでの部分は8Kのデータページに保持される
・従来のままの型で1行で8Kを超える場合、超えたとSQL Serverが判断した時点で超えた列について、1列につき24バイトのポインタを保持させ、超えた部分を行オーバフローページに押し出す
ということかと思います。
この辺は「Inside SQL Server 2005 ストレージエンジン編」という本にくわしく書かれていますよ。
jamshid6さん、ご回答ありがとう御座います。
> ・新設されたvarchar(max) 型などのLOBは1列ごとに16バイトのポインタを保持するが、先頭部分をデータエリア内に保持するというオプションを指定すると、最大500バイトまでの部分は8Kのデータページに保持される
> ・従来のままの型で1行で8Kを超える場合、超えたとSQL Serverが判断した時点で超えた列について、1列につき24バイトのポインタを保持させ、超えた部分を行オーバフローページに押し出す
そういう仕組みなんですね。
言葉を言い換えて頂いたのでよくわかりました。
本当にありがとうございます。
> この辺は「Inside SQL Server 2005 ストレージエンジン編」という本にくわしく書かれていますよ。
早速読んでみたいと思います。
とても勉強になりました。ありがとうございました。
No.3
- 回答日時:
私なりの解釈まとめ。
・溢れた分は、"他所"に保管します(その際、24バイト分の"他所"の場所情報を保存)
・varchar(max)等は最初から"他所"として、16バイト分の場所情報だけを保存します
・"他所"の場所情報込みで、1レコード8KBまでですよ。
ってトコでしょうか。
kuroizellさん、ご回答ありがとう御座います。
> ・溢れた分は、"他所"に保管します(その際、24バイト分の"他所"の場所情報を保存)
> ・varchar(max)等は最初から"他所"として、16バイト分の場所情報だけを保存します
> ・"他所"の場所情報込みで、1レコード8KBまでですよ。
整理していただきありがとうございます。
だいぶ混乱していたようです。
色々と勘違いばかりしていましたが、ようやくわかってきました。
とても助かりました。ありがとうございました。
No.2
- 回答日時:
SQL Server 2005以降の変更ですが、別にデータページのサイズが変わったわけではなく、従来と同じ8Kのままです。
ただ、複数のフィールドの合計が8Kを超えた場合は行オーバーフローページにあふれたものを収録することができるようになったので、結果として8Kを超えるサイズのテーブルを作成できるようになったということです(オーバーフローした場合は24バイト分のポインタを8K内に保持します)。「組み合わせた場合」というのは「データ型を組み合わせた場合」という意味ではありません。別にvarcharだけを組み合わせてもいいです。
SQL Server 2005で新設されたMAXがつく型は、そもそもLOB(ラージオブジェクト)ですので、8K内には16バイトのポインタしか保持しません。
(設定により500バイトまでは8K内に保持することができますが)
したがって、上記のサイズの対象外になります。
行オーバーフローにせよ、ラージオブジェクトにせよ、ポインタを保持して別のデータページにデータを保管しているわけですから、当然パフォーマンスには多少影響があることになります。また、ポインタとはいえ16ないし24バイトの領域を必要としますので、オーバーフローする列が多くなれば当然8Kのデータページ内の領域は食います。したがって、オーバーフローできる列数は無制限ではありません。
この回答への補足
jamshid6さん、ご回答ありがとう御座います。
>オーバーフローした場合は24バイト分のポインタを8K内に保持します
ここがどうなるかがよくわかっていませんでした。
そういう仕組みになっていたのですね、ご説明ありがとうございます。
>「組み合わせた場合」というのは「データ型を組み合わせた場合」という意味ではありません。別にvarcharだけを組み合わせてもいいです。
ありがとうございます。
> SQL Server 2005で新設されたMAXがつく型は、そもそもLOB(ラージオブジェクト)ですので、8K内には16バイトのポインタしか保持しません。
> (設定により500バイトまでは8K内に保持することができますが)
> したがって、上記のサイズの対象外になります。
なるほど、ありがとうございます。
とするとお時間が許すならもう1つヒントをいただけないでしょうか。
おっしゃっていることをまとめてみたのですが↓であっていますでしょうか?
・新設されたvarchar(max) 型などのLOBは1列ごとに16バイト、1行で最大500バイトまでのポインタを保持する
・従来のままの型で1行で8Kを超える場合1行全体で24バイトのポインタを保持する
どうかよろしくお願いいたします。
No.1
- 回答日時:
MS SQLserverは触ったことないので、よく分かりませんが
>「組み合わせた場合」
MSのサイト見ましたが、「1レコードあたりのデータ量は8060バイト制限ですが、varchar等を含む場合は別で、1カラムあたりは相変わらず8000バイト制限だけど、1レコード合計ではもっといけるようになりましたよ。」という風な意味に読めました。
MSのサイトの意味不明さには毎度閉口します。
>「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」
> varchar [ ( n | max ) ]
> max は、記憶領域のサイズが 2^31-1 バイトであることを示しています。
http://msdn.microsoft.com/ja-jp/library/ms176089 …
varchar(max)っていうのが新しく出来て、「8000バイト超えるならそっち使って下さい、varchar(8000)とかとは別ルールですよ(この制限(中略)適用されません)」という風な意味でしょうか。
この回答への補足
kuroizellさん、ご回答ありがとう御座います。
> MS SQLserverは触ったことないので、よく分かりませんが
> >「組み合わせた場合」
> MSのサイト見ましたが、「1レコードあたりのデータ量は8060バイト制限ですが、varchar等を含む場合は別で、1カラムあたりは相変わらず8000バイト制限だけど、1レコード合計ではもっといけるようになりましたよ。」という風な意味に読めました。
> MSのサイトの意味不明さには毎度閉口します。
たしかに、そう読むとあの文章もしっくりしてきました。
わかりやすく説明していただきありがとうございます。
> >「この制限は、varchar(max) 型、nvarchar(max) 型、varbinary(max) 型、ntext 型、text 型、image 型、または xml 型の列には適用されません。」
> > varchar [ ( n | max ) ]
> > max は、記憶領域のサイズが 2^31-1 バイトであることを示しています。
> ?http://msdn.microsoft.com/ja-jp/library/ms176089 …
> varchar(max)っていうのが新しく出来て、「8000バイト超えるならそっち使って下さい、varchar(8000)とかとは別ルールですよ(この制限(中略)適用されません)」という風な意味でしょうか。
なるほどです。リンクもありがとうございます。
内容をそのまま、まとめると
・varchar(max)は1カラムで8000バイト超えるときに使う
・varchar(max)が使われる行のバイト数上限は、varchar(max)バイト数を含めない8060バイトとなる
というような感じでしょうか。
もしお時間があれば上記の内容について、ご指摘などいただけるとありがたいです。
私もSQLServerはほとんど触っていないので、文面からのヒントだけでも非常に助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) ガーミン・ラップ数の保存上限 1 2023/07/13 16:43
- アルバイト・パート 交通費の上限を超えてしまう場合皆さんはどうしますか? 中々新しいバイトが決まらない中、先日採用の連絡 3 2022/04/03 10:40
- 雇用保険 大学生アルバイトの社会保険について 2 2022/04/03 22:07
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- 英語 関係代名詞「非制限用法」が説明する先行詞が無冠詞複数形の場合「一般的総称」と見なすことの可否について 10 2022/07/20 10:19
- その他(法律) 試しにGoogle Bard 36協定の要約しました。 1 2023/05/28 02:10
- プロバイダー・ISP データ通信量の制限値が無制限のようなプロバイダはありますか? 3 2023/07/12 02:13
- 求人情報・採用情報 長文ですが答えてくださるとうれしいです。 これは不採用確定ですよね? 今日野球場でのあるバイト面接が 1 2023/04/23 18:37
- 数学 無理数の数字の組み合わせ。無限の意味について 5 2022/05/28 22:53
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
脈アリか脈ナシか。
-
タイミーでバイトを雇った際の...
-
バイトの制服を家で洗って返す...
-
バイト始めて2日目ですが休みた...
-
バイト中ってトイレ行けないん...
-
精肉店のレジや袋詰め業務で、 ...
-
マクドナルドのクローズ作業
-
短期のバイトで入力しなければ...
-
バイトを辞めた後制服を返すの...
-
バイトの経験がある方にお聞き...
-
最大バイト数を調べるSQL文を教...
-
公文の採点バイトについて。 こ...
-
ラブホテルでのバイトを考えて...
-
低カロリーで腹もちする食べ物!
-
高1! 初バイトにファミレスの...
-
旋盤のステッキバイトで突っ切...
-
今日6時に起きて8時からバイト...
-
高校でバイト禁止の所って親戚...
-
夜職以外で陽キャとイケメンが...
-
バイトで自分だけ暇 6月から始...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タイミーでバイトを雇った際の...
-
バイトの制服を家で洗って返す...
-
最大バイト数を調べるSQL文を教...
-
3年働いたバイト先を辞めて、寂...
-
バイト中ってトイレ行けないん...
-
ラブホテルでのバイトを考えて...
-
“ありますか?”ではなく、“あっ...
-
近々初めてバイトを辞めます。 ...
-
学生時代とかでバイトばっくれ...
-
左目が腫れてしまいました。 も...
-
バイトを辞めた後制服を返すの...
-
半年でバイトが10人も辞めるっ...
-
バイト始めて2日目ですが休みた...
-
高校で隠れてバイトしたら学校...
-
公文の採点バイトについて。 こ...
-
バイト2回目の前日です。 土曜...
-
低カロリーで腹もちする食べ物!
-
バイトの時雨が降ってたら大体...
-
非常識??
-
バイトに行く時手ぶらでいきま...
おすすめ情報