SQL Server 2008でのvarcharの使用による速度への影響


9

昔は、他の行とは別のページに格納されていたため、varcharover を使用することcharは大したことではありませんvarcharでした。これは、SQL Server 2008でも現在も当てはまりますか?1〜3 varchar(5)列をchar(5)テーブルの列に変更することで、メモリ/パフォーマンスが向上しますか?

a)2.000.000行と言うb)varchar列のいずれかがインデックス/主キーの一部である場合


2
質問の重複の可能性があります長すぎるフィールド(varchar / nvarchar)は、パフォーマンスとディスク使用量にどのように影響しますか?(MSSQL Server 2008)。重複していないと思われる場合は、間違いなくそこにもいくつかの答えがあります。
マリアン

回答:


8

text / varchar(max)(LOBタイプ)とvarchar(n)/ char(n)を混同している

  • LOBタイプは、サイズ、UPDATE、sp_tableoptionなどに基づいて、行内/行外に格納さます
  • varchar(n)/ char(n)は常に「インライン」でした

それ以外の場合、varchar(1000)ではなくchar(1000)を使用し、平均データ長がたとえば42の場合、これは設計が悪く、多くのスペースが無駄になります。


DB2および他の一部のDBエンジンでは、charとvarcharは異なる方法で格納され、DB2に関するアドバイスの一部はSQL Serverに転送されました。
Andrew Bickerton、2011

@Andrew Bickerton:さらに別の神話...
gbn

その神話が暴かれた方向に私を向けることができますか?(私はアドバイスがSQL Serverに適用されないことに同意します)
Andrew Bickerton

私はまた、DB2の元のバージョンの1つを参照しています(おそらく過去10年間は​​この方法で行われていませんでした)。SQL2000でのアドバイスと同様に、パフォーマンスの問題がまだ残っているため、PKは非クラスター化する必要があります。もはや真実ではありません
アンドリュービッカートン

@Andrew Bickertonは:単純にSQL Serverの(私からいくつかのSOの答え)のディスク構造に見stackoverflow.com/search?q=user%3A27535+anatomy。返信が遅くなり申し訳ありません
gbn

3

特定のパフォーマンスの向上やヒットについて、スキーマの詳細を知らずに説明することは困難ですが、一般的には、データと一致するようにデータ型を定義する必要があります。固定幅が必要な場合(たとえば、常に5文字になることがわかっている場合)、char(5)を使用する必要があります。可変量のデータがある場合は、varchar(5)を使用する必要があります。

SQLの場合、ページに収まるデータが多いほど、パフォーマンスが向上します。


3

私が知る限り、SQL Serverはvarcharまたはnvarcharデータ型を行外に格納していません。テキストとNTextは異なります。可変幅の列に格納される余分な数ビットがありますが、それはそれで終わりです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.