web-dev-qa-db-fra.com

Que signifie ON [PRIMARY]?

Je crée un script d'installation SQL et j'utilise le script de quelqu'un d'autre à titre d'exemple. Voici un exemple de script:

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

Est-ce que quelqu'un sait ce que fait la commande ON [PRIMARY]?

217
Icono123

Lorsque vous créez une base de données dans Microsoft SQL Server, vous pouvez avoir plusieurs groupes de fichiers, dans lesquels le stockage est créé dans plusieurs emplacements, répertoires ou disques. Chaque groupe de fichiers peut être nommé. Le groupe de fichiers PRIMARY est le groupe par défaut, qui est toujours créé. Le code SQL que vous avez indiqué crée donc votre table SUR le groupe de fichiers PRIMARY.

Voir MSDN pour la syntaxe complète.

226
blowdart

Il fait référence au groupe de fichiers sur lequel réside l'objet que vous créez. Ainsi, votre groupe de fichiers principal pourrait résider sur le lecteur D:\de votre serveur. vous pouvez ensuite créer un autre groupe de fichiers appelé Indexes. Ce groupe de fichiers peut résider sur le lecteur E:\de votre serveur.

37
codingbadger

ON [PRIMARY] créera les structures sur le groupe de fichiers "primaire". Dans ce cas, l'index de clé primaire et la table seront placés dans le groupe de fichiers "Primaire" de la base de données.

15
Mark S.

Pour ajouter une note très importante sur ce que Mark S. a mentionné dans son post. Dans le script SQL spécifique mentionné dans la question, vous ne pouvez JAMAIS mentionner deux groupes de fichiers différents pour stocker vos lignes de données et la structure de données d'index.

La raison en est due au fait que l'index créé dans ce cas est un index en cluster sur votre colonne de clé primaire. Les données d'indexation en cluster et les lignes de données de votre table ne peuvent JAMAIS figurer sur des groupes de fichiers différents .

Donc, si vous avez deux groupes de fichiers sur votre base de données, par exemple. Le script PRIMARY et SECONDARY, puis mentionné ci-dessous, stockera vos données de ligne et d’index en cluster sur le groupe de fichiers PRIMARY même si j’ai mentionné un groupe de fichiers différent ([SECONDARY]) pour les données de la table. Plus intéressant encore, le script fonctionne également avec succès (quand je m'attendais à ce qu'il donne une erreur, comme j'avais donné deux groupes de fichiers différents: P). SQL Server fait le tour de la scène silencieusement et intelligemment.

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

REMARQUE: Votre index peut résider UNIQUEMENT sur un groupe de fichiers différent si l'index créé est de nature non clusterisée .

Le script ci-dessous qui crée un index non-cluster est créé sur le groupe de fichiers [SECONDARY] lorsque les données de la table résident déjà sur le groupe de fichiers [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

Vous pouvez obtenir plus d'informations sur la manière dont le stockage d'index non clusterisés sur un groupe de fichiers différent peut améliorer les performances de vos requêtes. Ici est l'un de ces liens.

6
RBT