2

可能な限り最小のデータ型を選択する必要がありますか、またはたとえば値1を格納する場合、colデータ型が何であるかは問題ではなく、値は同じメモリサイズを占有しますか?

問題は、私は常にそれを変換してアプリケーションで遊んでいなければならないということです。


アップデート

値が「a」の場合、varchar(1)とvarchar(50)は同じメモリサイズだと思います。intとtinyintでも同じだと思いました。答えによれば、そうではないのではないでしょうか。

4

4 に答える 4

4

常に可能な限り最小のデータ型を選択してください。SQLは、最大値を推測することはできませんが、データ型を指定すると、ストレージとパフォーマンスを最適化できます。


あなたの更新に答えるには:

varcharvarchar使用するスペースと同じだけのスペースを使用するため、選択したフィールドの大きさに関係なく、文字「a」は1バイト(ラテン語エンコード)を使用すると言うのは正しいことです。これは、SQLの他のタイプのフィールドには当てはまりません。

ただし、すべてをvarcharフィールドにすると、スペースの効率が犠牲になる可能性があります。すべてが固定サイズのフィールドである場合、SQLは単純な定数時間の乗算を実行して(配列のように)値を見つけることができます。そこにvarcharフィールドがある場合、データが保存されている場所を見つける唯一の方法は、以前のすべてのフィールド(リンクリストなど)を調べることです。

SQLを開始する場合は、テキストが非常に少ないフィールドとテキストが非常に多いフィールド(ブログ投稿など)が予想される場合を除いて、varcharフィールドには近づかないことをお勧めします。可変長フィールドを最適な効果で使用するタイミングを知るには経験が必要であり、私でさえほとんどの場合わかりません。

于 2009-10-27T03:05:32.663 に答える
4

これは、システムの設計に特有のパフォーマンスの考慮事項です。一般に、SQL Serverデータのページに収めることができるデータが多いほど、パフォーマンスは向上します。

SQLServerの1ページは8kです。intsの代わりに小さなintを使用すると、より多くのデータを1つのページに入れることができますが、それだけの価値があるかどうかを検討する必要があります。1分間に数千のヒットを提供する場合は、そうです。これが趣味のプロジェクトであるか、ほんの数十人のユーザーが目にするものであれば、それは問題ではありません。

于 2009-10-27T03:08:03.827 に答える
0

利点はありますが、行が多く、操作が失われない限り、重要ではない可能性があります。パフォーマンスが向上し、ストレージが小さくなります。

于 2009-10-27T03:07:05.027 に答える
0

従来、ページサイズに保存されたすべてのビットは、速度が少し向上することを意味します。行が狭いほど、ページあたりの行数が多くなります。つまり、消費されるメモリとIO要求が少なくなり、速度が向上します。ただし、SQL Server 2008のページ圧縮では、状況があいまいになり始めます。圧縮アルゴリズムは、1バイト未満でも255未満の値を持つ4バイトのintを圧縮する場合があります。

行圧縮アルゴリズムは、127未満の値(intは符号付き)の場合は1バイトに4バイトのintを格納し、32768未満の値の場合は2バイトを格納します。

ただし、優れた圧縮機能はEnterprise Editionサーバーでのみ使用できるため、可能な限り最小のデータ型を使用する習慣を維持することは理にかなっています。

于 2009-10-27T03:54:21.427 に答える