2009-07-30 6 views
1

スリー少し質問....SQL/WINDOWS - - 最適な文字長それは問題ではStackOverflowのの巧妙な人々のための

WINDOWS DOES:ウィンドウ内

  • 最大ファイル名の長さが 255です - なぜこれは、なぜ256ではないのですか?

  • 最大完全修飾ファイル名(フルパス)が32,767 であるのはなぜですか?実際には、エラーを避けるためには最大で 255/260でなければなりません。

SQL:文字を作成するか、SQLでのフィールドをVARCHARの際

  • 指定した長さは、パフォーマンスに影響を与えません。例:256のvarcharは、4000よりも優れた260または4096より優れたパフォーマンスを示しますか?

ありがとうございました。

答えて

2

符号なし1バイト(8ビット)の数値が11111111 = 255を表すことができる最大値であるため、255の最大値が使用されました。256になるには、9ビット1 0000 0000)

2番目の部分については、SQLの質問です:それは今日よりもはるかに多くの問題に使用されていました。データベースエンジンは、各行がその最大値を格納できるだけの十分な領域を割り当てる必要があります。したがって、入力した値は各レコードのディスクに割り当てられたスペースの量に影響し、ディスクスペースの "ページ"あたりの最大レコード数にも影響します。ページあたりのレコード数が少ないほど、ディスクI/O操作特定の数のレコードを取得するのにかかる時間...データベースI/Oがデータベースパフォーマンスの重要な要素であるため、これは大きな影響を与えました。

現代のRDBMSシステムでは、現時点ではレコードの実際のデータに基づいて実際にページに格納されるレコードの数を動的に制御することで、指定する。

+0

これは間違っています。 0〜255は256 VALUEです。文字列の長さは、終端のゼロを格納するために1バイトが必要だったため、しばしば255バイトである必要がありました。 – Christopher

+0

少ないバイトではありません:バイトを1つ少なくする必要があります。システム上のすべてのファイルに対して1バイト少ないバイト数で済むだけでなく、1バイト少なくなります。 –

+0

@Christopher可能な値が256個ある場合、最後の値は最初の値よりも255多いです。だから最初のものがゼロの場合、最後のものは.... 255です。しかし、それが1111 1111 ... 1 + 2 + 4 + 8 + ... + 64 + 128 = 255. –

1

シーケンスがゼロ:)

3

1から始まるので、256の可能な値があります)

2以上のチャールズの答えを参照)は、現在1を来ります。これはあまりにも簡単です。 Path!= Filename

3)重要なのは、ページサイズとレコードサイズの関係です。 varcharsを使用していて、フィールドが短くから長時間になる場所で多くのデータが変更された場合、SQLはレコードを別のページに移動するのに時間を費やします。あなたのcharフィールドが非常に長く、ページにあまり多くのレコードが収まらない場合、パフォーマンスが少し損なわれる可能性があります。データの長さが大きく変動する場合、varcharsはストレージスペースをより有効に活用します。そして、彼らはあなたのデータの終わりに、いつも離れなければならない厄介なスペースを持っていません。

0

SQL Server 2000には、8KBのフィールド、ページ、および行のサイズ制限があります。 SQL Server 2005+では、ページとフィールドの8KBの制限が適用されますが、行がオーバーフローする可能性があります(もちろん、パフォーマンスには致命的な影響があります)。

いくつかのDBAから理想的な行サイズは8KBの約数になるはずですが、行サイズを正確に計算する方法を正確に説明することはできませんでした。

+0

必ずしも正確な約数ではない。しかし、ページの行数が増えるほど、パフォーマンスが向上します。 (ページ上に1行の代わりに2行を入れることができるので、4000バイトの行は4100バイトよりもはるかに優れています。) –

+0

8KBはページのサイズで、そのページのいくつかは内部構造に使用されます。あなたは8030バイト程度で残っています... –

1

パス情報も保存している場合は、データベースにファイル名を格納するために、255文字以上のスペースが必要です。

Windowsのシェルは255文字、実際にはUNIXとの互換性のために32,000文字までのファイル名をサポートしていNTFSファイルシステムの最大パスを持っていますが。

Windowsシェルを偽装して、それを255文字を超える保存パス/ファイル名に騙すのは簡単です。ドライブのマッピングやフォルダの共有は、たとえばそれを行うことができます。

これについては、このブログ記事の256 character filenames should be enough for anybodyで詳しく説明します。

0

varchar(256)は、varchar(8000)またはvarchar(5)とまったく同じ働きをします。それらは同じに保存されています...(MS SQL Serverの場合)

1

バイト0 =長さ、8ビット符号なしですので255文字を使用できます。ゼロ=空文字列。 もう一方の255は、255の制限値です。

char(4000)はchar(10)と大きく異なります。 nullでない場合、SQL Serverは常にデータをパディングします。 7は、varchar型の255の制限なしユニコードを持っていた前に、あなたは900バイト

のSQL Serverの制限があり

インデックスを作成する場合を除きVARCHAR(4000)とvarchar(10)との間には差が、それは、ありませんが、サポート。それは痛みでした...

0

CHARは長さが固定されているため、長さとして指定するものと同じになります。

VARCHARは可変長で、あなたが入力したものだけを取り込みますが、現実世界のアプリケーションで30が必要なときに4000文字で自由に爆発するデータモデルが問題を求めています。

フィールドサイズは重要ですか? 小規模から中規模のシステムではおそらく、ハードウェアが不十分な設計を実行するのに十分でないためではありません。 大量の高トラフィックの高並列システムでは、すべてのバイト数がカウントされます。

関連する問題