ベストアンサー
テーブルをぶち壊すのは、レストランでの仕事です。それは顧客間のテーブルをきれいにすることを意味します。これには、汚れたアイテムや使用済みのアイテム(食器、銀器、ナプキン)をすべて取り除き、テーブルを拭き取ることが含まれます。
これの従来の役職は「バスボーイ」ですが、この仕事をするすべての人が男の子であるとは限りません。 。現在、よりジェンダーニュートラルな用語があるかもしれません。
回答
説明するシナリオでは、テーブルで最も一般的に使用されるフィールドが主キー(CompanyId)であると述べています。 )、単一のデータフィールド(CompanyName)、および外部キー(IndustryId)。これらのフィールドにインデックスがあり、主キーで保証されており、外部キーである可能性が非常に高い場合、データベースのパフォーマンスが低下するため、これらのフィールドのみを参照するクエリは、多くの場合、満たされます完全にインデックスから。データベースページ自体は読み取られません。これは、クエリアナライザにクエリ実行プランを要求することで自分で確認できます。実行プランで「インデックスシーク」または「インデックススプール」を使用する場合は、インデックスを使用してクエリ結果を作成します。プライマリキーインデックスがクラスター化されている場合、状況は多少異なりますが、そのままにしておきます。 SQL Serverのクラスター化インデックスとは何か、およびそれがデータベースの格納方法とアクセス方法をどのように変更するかを調査します。一般に、SQL Serverがインデックスからのデータを使用して結果セットを構築できる場合、データベーステーブルページを使用する代わりにそれを実行します。これは、読み取るデータが少なくなるためです。インデックスはテーブルと同じように構成されていますが、インデックスで指定された列と、行が格納されている場所へのポインタである行ロケータフィールドのみが含まれている点が異なります。そのポインタ(24バイト)は通常、行データ自体よりも小さいため、ほとんどの場合、テーブル行よりも多くのインデックステーブル行がデータベースページに収まります。
SQLServerのデータベースページサイズは8192に固定されています。バイト。ページの96バイトがヘッダーに使用されます。これに加えて他のオーバーヘッドにより、最大行サイズは8060バイトになります。ただし、SQL Server 2008では、varchar、nvarchar、varbinary、およびsql\_variant列がこの制限を超えることが許可され、行に含まれることで行がこの行サイズの制限を超える場合、これらのフィールドはオーバーフローページに移動します。また、text、ntext、image、nvarchar(max)、varchar(max)、varbinary(max)、およびxml列は、実際に列に格納されているデータの量に関係なく、常に別々のページに格納されます。あなたが投稿したテーブル定義は、8060バイトの制限をはるかに超える合計列幅を示していますが、これのほとんどはvarchar(n)フィールドにあるため、変数の実際のサイズが含まれる行の行オーバーフローページになります。幅の列は十分に大きいです。したがって、このテーブルで行が使用するページ数は、可変幅列に実際に格納されているデータの各行の長さによって異なります。
パフォーマンスの向上に関して、一般的に使用されるフィールドが少ない場合は、一般的に使用するフィールドとフィールドの組み合わせをインデックスとして使用できるようにするだけで、おそらく同じくらいの改善を得ることができます。これは、ほとんどの行セットがテーブルデータではなくインデックスデータから入力できることを意味します。これにより、データベースから大きな行をロードする際の問題を回避できます。何よりも、これは完全にDBAレベルで実行できます。インデックスの追加(または削除)によって引き起こされたスキーマへの変更を反映するためにアプリケーションを書き直す必要はありません。もちろん、結合の一部として使用する列にはインデックスを付ける必要があります。そうしないと、インデックスが作成されます。テーブルは、実際には非常に遅い結合をスキャンします。
これらの大きなフィールドの一部では、大きなnvarcharフィールドではなくntextを検討することをお勧めしますが、テキストのセマンティクスのためにアプリケーションコードの変更が必要になる場合があります。 / ntextは、varchar / nvarcharのものとは異なります。テキスト/ ntext列は、行データページに条件付きで保存されるのではなく、常に LOBページに保存され、これらの列が頻繁に存在し、中程度のサイズである場合(たとえば、 、1000〜2000バイト)、text / ntextとして保存すると、残りの行データページが小さくなり、ページあたりの行数が増える可能性があります。これにより、実際にこれらの列を参照する必要のないテーブルスキャンが高速化されます。