次の方法で共有


Tables

適用対象:Sql Server 2016 (13.x) 以降のバージョンAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW )、Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスSQL データベース

テーブルは、データベースのすべてのデータを格納するデータベース オブジェクトです。 テーブルでは、スプレッドシートのように、データが論理的に行と列の形式にまとめられます。 各行は一意なレコードを表し、各列はレコードのフィールドを表します。 たとえば、会社の従業員のデータを格納するテーブルを、各従業員に相当する行と、従業員の社員番号、姓名、住所、役職名、自宅の電話番号などの情報を格納する列から構成する場合があります。

  • データベース内のテーブルの数は、データベースで許可されているオブジェクトの数 (2,147,483,647) によってのみ制限されます。 標準のユーザー定義テーブルは、最大で 1, 024 の列を持つことができます。 テーブルの行の数は、サーバーの記憶域容量によってのみ制限されます。

  • テーブルやテーブルの各列にプロパティを割り当てて、許可されているデータや他のプロパティを制御することができます。 たとえば、列に NULL 値を許容しない制約を作成したり、値が指定されない場合の既定値を設定したりすることができます。また、テーブルにキー制約を割り当てて一意性を強制したり、テーブル間のリレーションシップを定義したりすることもできます。

  • テーブル内のデータは、行ごとまたはページごとに圧縮できます。 データを圧縮すると、より多くの行をページに格納できます。 詳細については、「データ圧縮」を参照してください。

テーブルの種類

SQL Server には、標準的な役割を果たす基本的なユーザー定義のテーブル以外に、データベース内で特別な目的で使用される次のような種類のテーブルがあります。

パーティション テーブル

パーティション テーブルは、データベース内の複数のファイル グループに分散される可能性がある単位にデータが水平方向に分割されるテーブルです。 大きなテーブルやインデックスをパーティション分割すると、コレクション全体の整合性を維持しながら、データのサブセットに対するアクセスや管理を迅速かつ効率的に行うことができるので、大きなテーブルやインデックスを管理しやすくなります。 SQL Server では、最大 15,000 個のパーティションを既定でサポートしています。 詳細については、「パーティション テーブルとインデックス」を参照してください。

一時テーブル

一時テーブルは tempdbに格納されます。 一時テーブルには、 ローカル テーブルと グローバルテーブルの 2 種類があります。 この 2 種類の一時テーブルでは、名前、表示設定、および可用性が異なります。

  • セッション スコープの一時テーブルとも呼ばれるローカル一時テーブルは、名前の最初の文字として単一の番号記号 (#) を持ちます。これらはユーザーの現在の接続にのみ表示され、ユーザーが SQL Server のインスタンスから切断すると削除されます。
  • グローバル一時テーブルは、名前の最初の文字として 2 つの数字 (##) を持ちます。作成後に任意のユーザーに表示され、テーブルを参照しているすべてのユーザーが SQL Server のインスタンスから切断されると削除されます。

Fabric Data Warehouse では、セッション スコープの一時テーブルのみがサポートされ、 タイム トラベル ヒントの影響を受けません。

複数のスコープにまたがる一時テーブルを使用するワークロードの再コンパイルの削減

すべてのデータベース互換レベルにおいて、SQL Server 2019 (15.x) により、複数のスコープにまたがる一時テーブルを使用するワークロードの再コンパイルが減ります。 この機能は、すべてのデプロイ モデルのデータベース互換レベル 150 の Azure SQL Database でも有効になります。 この機能が提供されるまでは、一時テーブルが外側のスコープのバッチによって作成されていた場合、データ操作言語 (DML) ステートメント (SELECTINSERTUPDATEDELETE) で一時テーブルを参照すると、実行のたびに DML ステートメントが再コンパイルされました。 この改良により、SQL Server では追加の軽量なチェックが実行されて、不要な再コンパイルが回避されます。

  • コンパイル時に一時テーブルの作成に使用される外側のスコープのモジュールが、連続実行に使用されるものと同じかどうかを確認してください。
  • 最初のコンパイルで行われたデータ定義言語 (DDL) のすべての変更を追跡し、連続実行に対する DDL 操作と比較します。

最終的な結果は、余分な再コンパイルと CPU のオーバーヘッドを削減することです。

システム テーブル

SQL Server では、サーバーの構成とそのすべてのテーブルの構成を定義したデータが、システム テーブルという特殊なテーブル セットに格納されます。 ユーザーは、システム テーブルに対して直接クエリや更新を行うことはできません。 システム テーブル内の情報は、システム ビューから入手できます。 一覧については、「 システム テーブル (Transact-SQL)」を参照してください。

横長のテーブル

幅の広いテーブルでは、 スパース列 を使用して、テーブルに持たせることができる列の合計数が 30,000 まで増加します。 スパース列は、NULL 値用にストレージが最適化されている通常の列です。 スパース列によって、NULL 以外の値を取得するためのオーバーヘッドは増大しますが、NULL 値に必要となる領域は削減されます。 幅の広いテーブルでは 列セットが定義されています。これは、型指定されていない XML 表記であり、テーブルのすべてのスパース列を 1 つにまとめて構造化した出力です。 インデックスと統計情報の数も、それぞれ 1,000 と 30,000 に増加します。 幅の広いテーブルの最大行サイズは 8,019 バイトです。 そのため、特定の行のデータのほとんどは NULLする必要があります。 幅の広いテーブルの非スパース列と計算列の最大数は合わせて 1,024 のままです。

幅の広いテーブルは、パフォーマンスに対して次のような影響を与えます。

  • 幅の広いテーブルは、テーブルのインデックスの管理にかかるコストを増加させる場合があります。 幅の広いテーブルのインデックスの数は、ビジネス ロジックで必要なインデックスの数に制限することをお勧めします。 インデックスの数が増加すると、DML のコンパイル時間および必要なメモリ容量も増加します。 非クラスター化インデックスは、データのサブセットに適用されるフィルター選択されたインデックスにする必要があります。 詳細については、「 フィルター選択されたインデックスの作成」を参照してください。

  • アプリケーションでは、幅の広いテーブルから動的に列を追加したり削除したりできます。 列が追加または削除された場合、コンパイルされたクエリ プランも無効になります。 スキーマの変更が最小限になるように、予測されるワークロードに合わせてアプリケーションを設計することをお勧めします。

  • データが幅の広いテーブルから追加および削除される場合、パフォーマンスに影響が生じる可能性があります。 アプリケーションは、テーブル データへの変更を最小限に抑えるために、予想されるワークロード用に設計する必要があります。

  • クラスター化キーの複数の行を更新する、幅の広いテーブル上での DML ステートメントの実行を制限します。 これらのステートメントのコンパイルおよび実行には、大量のメモリ リソースが必要になる場合があります。

  • 幅の広いテーブルでのパーティションの切り替え操作は、実行速度が遅く、処理に大量のメモリが必要になる場合があります。 パフォーマンスおよびメモリの要件は、切り替え元のパーティションと切り替え先のパーティションの両方の列の合計数に比例します。

  • 幅の広いテーブルの特定の列を更新する更新カーソルは、FOR UPDATE 句で明示的に列を列挙する必要があります。 これは、カーソルを使用する場合にパフォーマンスを最適化するのに役立ちます。

一般的なテーブルの作業

次の表に、テーブルの作成や変更に関連する一般的なタスクへのリンクを示します。

テーブル タスク Topic
テーブルを作成する方法について説明します。 テーブルの作成 (データベース エンジン)
テーブルを削除する方法について説明します。 テーブルの削除 (データベース エンジン)
既存のテーブルの一部またはすべての列を含む新しいテーブルを作成する方法について説明します。 重複するテーブル
テーブル名を変更する方法について説明します。 テーブルの名前の変更 (データベース エンジン)
テーブルのプロパティを表示する方法について説明します。 テーブル定義の表示
ビューやストアド プロシージャなどの他のオブジェクトがテーブルに依存しているかどうかを判断する方法について説明します。 テーブルの依存関係を表示する

次の表に、テーブル内の列の作成や変更に関連する一般的なタスクへのリンクを示します。

列タスク Topic
既存のテーブルに列を追加する方法について説明します。 テーブルへの列の追加 (データベース エンジン)
テーブルの列を削除する方法について説明します。 テーブルから列を削除する
列の名前を変更する方法について説明します。 列の名前の変更 (データベース エンジン)
列の定義のみ、または定義とデータの両方をコピーすることで、あるテーブルから別のテーブルに列をコピーする方法について説明します。 テーブル間での列のコピー (データベース エンジン)
データ型やその他のプロパティを変更することによって列定義を変更する方法について説明します。 列の変更
列の表示順序を変更する方法について説明します。 テーブル内の列の順序の変更
テーブルに計算列を作成する方法について説明します。 テーブル内の計算列を指定する
列の既定値を指定する方法を説明します。 この値は、別の値が指定されない場合に使用されます。 列の既定値を指定する