2010-12-15 20 views
8

私たちは大小のプロジェクトをいくつか持っています - それらのうちの大部分(すべてではないにしても)が少なくとも1つのSQL Server DBを使用しています。それらのすべてが異なる環境を設定しています。典型的には:dev(1+)、QA、UAT、Live。 また、さまざまなコードの更新を、相互に独立した異なる環境にリリースすることも一般的です。当然のことながら、これらの更新プログラムのいくつかは、このようなテーブル内の列の順序は重要ですか?

時には手で作られた
alter table foo add column bar 
go 
update foo set bar=... where ... 

としてスキーマ更新スクリプトが付属して、レッドゲートSQL /データを使用して、他の回の比較します。

とにかく私はこれと一緒に行くつもりですが、同じプロジェクトのさまざまな環境が、列の順序が異なることがよくあります。これは問題ですか?私は実際にはわかりません... 列の順序はパフォーマンスに影響しますか?私は行方不明になることは何ですか?

答えて

8

いいえ、列の順序は重要ではありません。実際には、列のデータがディスクに格納される順番は、エンジンがデータを並べ替えてストレージスペースと読み書きのパフォーマンスを最適化するため、クライアントツールに表示される順序とは異なる場合があります(複数のビットフィールドを単一のメモリ位置)、

+0

@marc_s:もちろん参照があります... http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspxまたはMSDN/BOL too – gbn

3

あなたのケースの95%では、列の順序に違いはありません。そして、関係理論的な観点からは、テーブルの列の順序は関係なくです。

多くの場合、VARCHARのような可変サイズのフィールドが多数ある場合、列の順序がテーブルに多少の影響を与える場合があります。しかし、その数は本当に大きくする必要があり、フィールド(そのサイズ)は本当に大量にする必要があります。そのような場合は、列の順序に関して表の末尾に可変サイズのフィールドを配置すると効果的です。

もう一度:これは、まさにノルムではなく、まれなケースです。

また、SQL Serverには列を並べ替える手段がありません。視覚的なテーブルデザイナーでこれを行うことができますが、SQL Serverのカバーでは、目的の列の順序で新しいテーブルを作成し、古いテーブルのすべてのデータをコピーします。これが、大規模なテーブルでは非常に退屈で時間のかかる操作である理由です。

+0

はい、列を並べ替えるためにテーブルを再作成する必要があることを知っていますが、Charles BretanaはSQL Studioの列の順序が実際にDBに格納されている順序と同じではないと言っているようです。 –

+0

@ liho1eye:はい、私もそれを読むことに驚きました - それが本当で、その事実への言及も見つけられないのかどうかはわかりません。 –

+0

@ liho1eye、@marc_s:ディスク上のストレージを見ると、固定長カラムが最初に可変長になります。 「ストリング・ラスト」についての古い格言は、ごみIMHOです。 http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspxまたはMSDN/BOL too – gbn

関連する問題