• 締切済み

テーブルのバイト数計算

SQL Server 2000 を使用しています。 Aテーブルが空の状態でのAテーブルの使用しているバイト数 及び、レコードを1件追加した際のバイト数は どの用に出してやればいいのでしょうか? Decimal型でn桁ならnバイト Nvarchar型でn桁ならnバイト という感じでAテーブルで使用してる 各列のバイト数を足してやれば空の状態のバイト数は出るのでしょうか? 検索してみてもこの辺りの事がうまく調べられなかったので どなたかアドバイスお願いいたします。

みんなの回答

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

レコードデータサイズで大事なことが1つ抜けていました。 NULL許容カラムは、そうでないカラムよりも1バイト大きくなります。ですので、例えば10カラムあって全部NULL許容の場合は、そうでない場合と比較してレコードデータサイズが10バイト大きくなります。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

※以下に書くことはSQL Server 7.0の頃の知識なので、SQL Server 2000でそのまま適用することはできないかもしれません。また、1バイト/2バイト/4バイトの別などは誤っているかもしれません。 SQL Server 6.x~7.0では、レコードが占有する領域は次のようにして計算することができます。 テーブルの各カラムの型について、次の数値の合計 固定長データであれば、そのバイト数(注:Decimalについては2桁で1バイト) text型とimage型であれば、8バイト それ以外の可変長データであれば、データ長+1バイト テーブルが占有する領域は、おおよそ次のように計算できます。 レコードが占有する領域の総和 * 100 / ページ充填率(1-100)+text/image型データ(1レコードの1カラムごとに2KB単位に切り上げ)の総和+インデクスが占有する領域の総和 なお、上記は非常におおざっぱな記述で、細かくは条件によって変わってきます。例えば主キーがクラスタ化インデクスか非クラスタ化インデクスかによってずいぶん変わりますし、全く同じレコードデータであってもinsertする順番によって占める領域は非常に大きく変わります。(insertの順序によって充填率が変わるためです。) ですので、解析的にバイト数を計算するのは無駄とまでは言いませんが、実際にはライブデータで見積もりを行うか、そうでなければ最悪値を求めるためだけに使用するのが賢明です。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

空の状態であれば、理論的には0バイト 1件追加した場合は、質問にあるように、 各フィールドの合計値=レコード長 です。 まぁ、理論的にはというのは、テーブルが空でも、 定義をした時点で、メモリや、ファイルはある程度占有しています。 しかし通常、データ量を論じる場合には、この定義をした分のメモリやファイルは無視するのが普通だと思います。

関連するQ&A