ON [PRIMARY]の意味?


237

私はSQLセットアップスクリプトを作成し、他の誰かのスクリプトを例として使用しています。スクリプトの例を次に示します。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[be_Categories](
    [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),
    [CategoryName] [nvarchar](50) NULL,
    [Description] [nvarchar](200) NULL,
    [ParentID] [uniqueidentifier] NULL,
 CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ON [PRIMARY]コマンドの機能を知っている人はいますか?

回答:


248

Microsoft SQL Serverでデータベースを作成すると、複数のファイルグループを作成でき、ストレージは複数の場所、ディレクトリ、またはディスクに作成されます。各ファイルグループには名前を付けることができます。PRIMARYファイルグループはデフォルトのグループであり、常に作成されるため、指定したSQLにより、PRIMARYファイルグループにテーブルが作成されます。

完全な構文については、MSDNを参照してください。


153
これは、通常は役に立たず、スクリプトから安全に削除できることも意味します。
MGOwen 2011

はい、同じように、変数の初期化を省略して0とfalseにすることができます。これは、デフォルトであるためですよね?
Mark Sowul 2013

12
@MarkSowulパフォーマンスを最適化するためにこれを使用する十分な理由がない限り、はい、省略してデフォルトを発生させても問題ありません。変数を初期化する(したがって、「通常」MGOwenは。付属)0またはfalseあなたのコードは論理的で正確な関心事ではなく、最適化問題である既知の状態で動作していることを保証することについてです。
jpmc26 2015

3
私が見ON PRIMARYスクリプトで二回構文を-テーブル制約のためにテーブルの一つと別。ストレージに関してテーブル制約がある場合、それは何を意味しますか?それは私には無関係または冗長に聞こえます。構文的には、テーブルレベルで一度言及すれば十分なはずですが、テーブルをPRIMARYファイルグループに格納し、テーブル制約データを非PRIMARYファイルグループに格納することは本当に可能ですか?
RBT 2016

1
これが実際のMSDNリンクです。答えの1つは機能しなくなり、投稿を編集できません!
シェカール2017

38

これは、作成するオブジェクトが存在するファイルグループを指します。したがって、プライマリファイルグループは、サーバーのドライブD:\に配置できます。次に、Indexesと呼ばれる別のファイルグループを作成できます。このファイルグループは、サーバーのドライブE:\に存在する可能性があります。


テーブルをPRIMARYファイルグループに格納し、テーブルの制約またはインデックスデータ構造を別のファイルグループに格納すると、パフォーマンスに悪影響がありますか?
RBT 2016

@RBTあり、この影響を与えることができる変数の多くがあり、通常の回答の多くが始まります「それは依存するが...」を参照してくださいdba.stackexchange.com/questions/2626/...や関連質問に
codingbadger

16

ON [PRIMARY]は、「プライマリ」ファイルグループに構造を作成します。この場合、主キーインデックスとテーブルは、データベース内の「プライマリ」ファイルグループに配置されます。


7

Mark S.が彼の投稿で述べたことについて非常に重要なメモを追加します。質問で述べた特定のSQLスクリプトでは、データ行とインデックスデータ構造を格納するための2つの異なるファイルグループについて決して言及することはできません。

この理由は、この場合に作成されるインデックスは、主キー列のクラスター化インデックスであるためです。クラスタ化インデックスデータとテーブルのデータ行が異なるファイルグループに存在することはありません

したがって、データベースに2つのファイルグループ(例:PRIMARYとSECONDARY)がある場合、以下のスクリプトは[SECONDARY]、テーブルデータに別のファイルグループ()を指定した場合でも、行データとクラスター化インデックスデータの両方をPRIMARYファイルグループ自体に格納します。さらに興味深いことに、スクリプトも正常に実行されます(2つの異なるファイルグループ:Pを指定したため、エラーが発生すると予期していたとき)。SQL Serverは、舞台裏の裏技を静かにかつスマートに実行します。

CREATE TABLE [dbo].[be_Categories](
    [CategoryID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_be_Categories_CategoryID]  DEFAULT (newid()),
    [CategoryName] [nvarchar](50) NULL,
    [Description] [nvarchar](200) NULL,
    [ParentID] [uniqueidentifier] NULL,
 CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [SECONDARY]
GO

注:作成するインデックスが本質的に非クラスター化である場合にのみ、インデックスを別のファイルグループに配置できます

非クラスター化インデックスを作成する以下のスクリプト[SECONDARY]は、テーブルデータが[PRIMARY]ファイルグループに既に存在する場合、代わりにファイルグループに作成されます。

CREATE NONCLUSTERED INDEX [IX_Categories] ON [dbo].[be_Categories]
(
    [CategoryName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [Secondary]
GO

クラスター化されていないインデックスを別のファイルグループに保存することで、クエリのパフォーマンスを向上させる方法に関する詳細情報を取得できます。ここにそのようなリンクがあります。

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