コラムがありますfield1 varchar(32)
このフィールドに「ABC」を格納するだけの場合、3バイトかかります。SQL Serverがこの列にアクセスしてメモリにキャッシュする場合、どのくらいのメモリが必要ですか?3バイトまたは32バイト、そしてあなたの答えを証明する方法は?
前もって感謝します
コラムがありますfield1 varchar(32)
このフィールドに「ABC」を格納するだけの場合、3バイトかかります。SQL Serverがこの列にアクセスしてメモリにキャッシュする場合、どのくらいのメモリが必要ですか?3バイトまたは32バイト、そしてあなたの答えを証明する方法は?
前もって感謝します
SQLServerは列をキャッシュしません。値が含まれているページ全体がキャッシュされるため、常に8192バイトがキャッシュされます。ページの場所は、行内ストレージと行オーバーフローストレージ、および列がスパースであるかどうかなどの影響を受けます。
さて、より良い質問は、そのような値がページでどれだけ占めるかということです。値は非圧縮、行圧縮、ページ圧縮、または列圧縮で保存できるため、答えは簡単ではありません。行の圧縮はvarcharフィールドに影響を与えませんが、ページの圧縮は影響を及ぼします。
ここで、タイプ値が非圧縮テーブルの行に占めるストレージvarchar(32)
の量に答える簡単な方法として、最適なリソースはストレージエンジンの内部:レコードの構造です。Paul Randalの記事を読んだ後、質問に答えることができ、答えを証明することもできます。
さらに、この列をキーとして持つ、またはこの列を含むセカンダリインデックスを考慮する必要があります。
宣言されたサイズの平均50%。これに関する多くのドキュメントがあります。これは、SQLServerデータベースにvarchar値がどのように格納されているかから取得した場所です。