テーブルTables

適用対象: ○SQL Server (2016 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

テーブルは、データベースのすべてのデータを格納するデータベース オブジェクトです。Tables are database objects that contain all the data in a database. テーブルでは、スプレッドシートのように、データが論理的に行と列の形式にまとめられます。In tables, data is logically organized in a row-and-column format similar to a spreadsheet. 各行は一意なレコードを表し、各列はレコードのフィールドを表します。Each row represents a unique record, and each column represents a field in the record. たとえば、会社の従業員のデータを格納するテーブルを、各従業員に相当する行と、従業員の社員番号、姓名、住所、役職名、自宅の電話番号などの情報を格納する列から構成する場合があります。For example, a table that contains employee data for a company might contain a row for each employee and columns representing employee information such as employee number, name, address, job title, and home telephone number.

  • データベース内のテーブルの数は、データベースで許可されているオブジェクトの数 (2、147、483、および 647) によってのみ制限されます。The number of tables in a database is limited only by the number of objects allowed in a database (2,147,483,647). 標準のユーザー定義テーブルは、最大で 1, 024 の列を持つことができます。A standard user-defined table can have up to 1,024 columns. テーブルの行の数は、サーバーの記憶域容量によってのみ制限されます。The number of rows in the table is limited only by the storage capacity of the server.

  • テーブルやテーブルの各列にプロパティを割り当てて、許可されているデータや他のプロパティを制御することができます。You can assign properties to the table and to each column in the table to control the data that is allowed and other properties. たとえば、列に NULL 値を許容しない制約を作成したり、値が指定されない場合の既定値を設定したりすることができます。また、テーブルにキー制約を割り当てて一意性を強制したり、テーブル間のリレーションシップを定義したりすることもできます。For example, you can create constraints on a column to disallow null values or provide a default value if a value is not specified, or you can assign a key constraint on the table that enforces uniqueness or defines a relationship between tables.

  • テーブル内のデータは、行ごとまたはページごとに圧縮できます。The data in the table can be compressed either by row or by page. データを圧縮すると、より多くの行をページに格納できます。Data compression can allow more rows to be stored on a page. 詳細については、「 Data Compression」を参照してください。For more information, see Data Compression.

テーブルの種類Types of Tables

SQL ServerSQL Server には、標準的な役割を果たす基本的なユーザー定義のテーブル以外に、データベース内で特別な目的で使用される次のようなテーブルがあります。Besides the standard role of basic user-defined tables, SQL ServerSQL Server provides the following types of tables that serve special purposes in a database.

パーティション テーブルPartitioned Tables

パーティション テーブルはデータが行方向に分割されているテーブルで、パーティションがデータベースの複数のファイル グループに分散される場合もあります。Partitioned tables are tables whose data is horizontally divided into units which may be spread across more than one filegroup in a database. 大きなテーブルやインデックスをパーティション分割すると、コレクション全体の整合性を維持しながら、データのサブセットに対するアクセスや管理を迅速かつ効率的に行うことができるので、大きなテーブルやインデックスを管理しやすくなります。Partitioning makes large tables or indexes more manageable by letting you access or manage subsets of data quickly and efficiently, while maintaining the integrity of the overall collection. SQL Server 2017SQL Server 2017 では、最大 15,000 個のパーティションを既定でサポートしています。By default, SQL Server 2017SQL Server 2017 supports up to 15,000 partitions. 詳細については、「 Partitioned Tables and Indexes」を参照してください。For more information, see Partitioned Tables and Indexes.

一時テーブルTemporary Tables

一時テーブルは tempdbに格納されます。Temporary tables are stored in tempdb. 一時テーブルには、ローカル一時テーブルとグローバル一時テーブルの 2 種類があります。There are two types of temporary tables: local and global. この 2 種類の一時テーブルでは、名前、表示設定、および可用性が異なります。They differ from each other in their names, their visibility, and their availability. ローカル一時テーブル名の先頭には、番号記号 (#) が 1 つ付いています。このテーブルは、作成したユーザーの現在の接続でのみ表示され、このユーザーが SQL ServerSQL Serverのインスタンスから切断すると削除されます。Local temporary tables have a single number sign (#) as the first character of their names; they are visible only to the current connection for the user, and they are deleted when the user disconnects from the instance of SQL ServerSQL Server. グローバル一時テーブル名の先頭には、番号記号が 2 つ (##) 付いています。このテーブルは、作成されるとすべてのユーザーに表示され、このテーブルを参照するすべてのユーザーが SQL ServerSQL Serverのインスタンスから切断すると削除されます。Global temporary tables have two number signs (##) as the first characters of their names; they are visible to any user after they are created, and they are deleted when all users referencing the table disconnect from the instance of SQL ServerSQL Server.

システム テーブルSystem Tables

SQL ServerSQL Server では、サーバーの構成とすべてのテーブルの構成を定義したデータが、システム テーブルという特殊なテーブル セットに格納されます。stores the data that defines the configuration of the server and all its tables in a special set of tables known as system tables. ユーザーは、システム テーブルに対して直接クエリや更新を行うことはできません。Users cannot directly query or update the system tables. システム テーブル内の情報は、システム ビューから入手できます。The information in the system tables is made available through the system views. 詳細については、「システム ビュー (Transact-SQL)」を参照してください。For more information, see System Views (Transact-SQL).

幅の広いテーブルWide Tables

幅の広いテーブルでは、 スパース列 を使用して、テーブルに持たせることができる列の合計数が 30,000 まで増加します。Wide tables use sparse columns to increase the total of columns that a table can have to 30,000. スパース列は、NULL 値用にストレージが最適化されている通常の列です。Sparse columns are ordinary columns that have an optimized storage for null values. スパース列によって、NULL 以外の値を取得するためのオーバーヘッドは増大しますが、NULL 値に必要となる領域は削減されます。Sparse columns reduce the space requirements for null values at the cost of more overhead to retrieve nonnull values. 幅の広いテーブルでは 列セットが定義されています。これは、型指定されていない XML 表記であり、テーブルのすべてのスパース列を 1 つにまとめて構造化した出力です。A wide table has defined a column set, which is an untyped XML representation that combines all the sparse columns of a table into a structured output. インデックスと統計情報の数も、それぞれ 1,000 と 30,000 に増加します。The number of indexes and statistics is also increased to 1,000 and 30,000, respectively. 幅の広いテーブルの最大行サイズは 8,019 バイトです。The maximum size of a wide table row is 8,019 bytes. そのため、特定の行のデータの大部分を NULL にする必要があります。Therefore, most of the data in any particular row should be NULL. 幅の広いテーブルの非スパース列と計算列の最大数は合わせて 1,024 のままです。The maximum number of nonsparse columns plus computed columns in a wide table remains 1,024.

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

  • 幅の広いテーブルは、テーブルのインデックスの管理にかかるコストを増加させる場合があります。Wide tables can increase the cost to maintain indexes on the table. 幅の広いテーブルのインデックスの数は、ビジネス ロジックで必要なインデックスの数に制限することをお勧めします。We recommend that the number of indexes on a wide table be limited to the indexes that are required by the business logic. インデックスの数が増加すると、DML のコンパイル時間および必要なメモリ容量も増加します。As the number of indexes increases, so does the DML compile-time and memory requirement. 非クラスター化インデックスは、データのサブセットに適用されるフィルター選択されたインデックスにする必要があります。Nonclustered indexes should be filtered indexes that are applied to data subsets. 詳細については、「 Create Filtered Indexes」を参照してください。For more information, see Create Filtered Indexes.

  • アプリケーションでは、幅の広いテーブルから動的に列を追加したり削除したりできます。Applications can dynamically add and remove columns from wide tables. 列が追加または削除された場合、コンパイルされたクエリ プランも無効になります。When columns are added or removed, compiled query plans are also invalidated. スキーマの変更が最小限になるように、予測されるワークロードに合わせてアプリケーションを設計することをお勧めします。We recommend that you design an application to match the projected workload so that schema changes are minimized.

  • データが幅の広いテーブルから追加および削除される場合、パフォーマンスに影響が生じる可能性があります。When data is added and removed from a wide table, performance can be affected. テーブルに対する変更が最小限になるように、予測されるワークロードに合わせてアプリケーションを設計する必要があります。Applications must be designed for the projected workload so that changes to the table data is minimized.

  • クラスター化キーの複数の行を更新する、幅の広いテーブル上での DML ステートメントの実行を制限します。Limit the execution of DML statements on a wide table that update multiple rows of a clustering key. これらのステートメントのコンパイルおよび実行には、大量のメモリ リソースが必要になる場合があります。These statements can require significant memory resources to compile and execute.

  • 幅の広いテーブルでのパーティションの切り替え操作は、実行速度が遅く、処理に大量のメモリが必要になる場合があります。Switch partition operations on wide tables can be slow and might require large amounts of memory to process. パフォーマンスおよびメモリの要件は、切り替え元のパーティションと切り替え先のパーティションの両方の列の合計数に比例します。The performance and memory requirements are proportional to the total number of columns in both the source and target partitions.

  • 幅の広いテーブルの特定の列を更新する更新カーソルは、FOR UPDATE 句で明示的に列を列挙する必要があります。Update cursors that update specific columns in a wide table should list the columns explicitly in the FOR UPDATE clause. これは、カーソルを使用する場合にパフォーマンスを最適化するのに役立ちます。This will help optimize performance when you use cursors.

一般的なテーブルのタスクCommon Table Tasks

次の表に、テーブルの作成や変更に関連する一般的なタスクへのリンクを示します。The following table provides links to common tasks associated with creating or modifying a table.

テーブルのタスクTable Tasks トピックTopic
テーブルを作成する方法について説明します。Describes how to create a table. テーブルの作成 (データベース エンジン)Create Tables (Database Engine)
テーブルを削除する方法について説明します。Describes how to delete a table. テーブルの削除 (データベース エンジン)Delete Tables (Database Engine)
既存のテーブルの一部またはすべての列を含む新しいテーブルを作成する方法について説明します。Describes how to create a new table that contains some or all of the columns in an existing table. テーブルの複製Duplicate Tables
テーブル名を変更する方法について説明します。Describes how to rename a table. テーブル名の変更 (データベース エンジン)Rename Tables (Database Engine)
テーブルのプロパティを表示する方法について説明します。Describes how to view the properties of the table. テーブル定義の表示View the Table Definition
ビューやストアド プロシージャなどの他のオブジェクトがテーブルに依存しているかどうかを判断する方法について説明します。Describes how to determine whether other objects such as a view or stored procedure depend on a table. テーブルの依存関係の表示View the Dependencies of a Table

次の表に、テーブル内の列の作成や変更に関連する一般的なタスクへのリンクを示します。The following table provides links to common tasks associated with creating or modifying columns in a table.

列のタスクColumn Tasks トピックTopic
既存のテーブルに列を追加する方法について説明します。Describes how to add columns to an existing table. テーブルへの列の追加 (データベース エンジン)Add Columns to a Table (Database Engine)
テーブルの列を削除する方法について説明します。Describes how to delete columns from a table. テーブルからの列の削除Delete Columns from a Table
列の名前を変更する方法について説明します。Describes how to change the name of a column. 列名の変更 (データベース エンジン)Rename Columns (Database Engine)
列の定義のみ、または定義とデータの両方をコピーすることで、あるテーブルから別のテーブルに列をコピーする方法について説明します。Describes how to copy columns from one table to another, copying either just the column definition, or the definition and data. テーブル間での列のコピー (データベース エンジン)Copy Columns from One Table to Another (Database Engine)
データ型やその他のプロパティを変更することによって列定義を変更する方法について説明します。Describes how to modify a column definition, by changing the data type or other property. 列の変更 (データベース エンジン)Modify Columns (Database Engine)
列の表示順序を変更する方法について説明します。Describes how to change the order in which the columns appear. テーブル内の列の順序の変更Change Column Order in a Table
テーブルに計算列を作成する方法について説明します。Describes how to create a computed column in a table. テーブルの計算列の指定Specify Computed Columns in a Table
列の既定値を指定する方法を説明します。Describes how to specify a default value for a column. この値は、別の値が指定されない場合に使用されます。This value is used if another value is not supplied. 列の既定値の指定Specify Default Values for Columns

参照See Also

主キー制約と外部キー制約 Primary and Foreign Key Constraints
UNIQUE 制約と CHECK 制約Unique Constraints and Check Constraints