it-swarm.com.de

Was bedeutet ON [PRIMARY]?

Ich erstelle ein SQL-Setup-Skript und verwende das Skript einer anderen Person als Beispiel. Hier ist ein Beispiel des Skripts:

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

Weiß jemand, was der Befehl ON [PRIMARY] tut?

217
Icono123

Wenn Sie eine Datenbank in Microsoft SQL Server erstellen, können Sie über mehrere Dateigruppen verfügen, in denen Speicher an mehreren Orten, Verzeichnissen oder Datenträgern erstellt wird. Jede Dateigruppe kann benannt werden. Die PRIMARY-Dateigruppe ist die Standarddateigruppe, die immer erstellt wird. Daher erstellt die von Ihnen angegebene SQL Ihre Tabelle in der PRIMARY-Dateigruppe.

Siehe MSDN für die vollständige Syntax.

226
blowdart

Es bezieht sich auf die Dateigruppe, in der sich das Objekt befindet, das Sie erstellen. Ihre primäre Dateigruppe könnte sich also auf Laufwerk D:\Ihres Servers befinden. Sie könnten dann eine andere Dateigruppe mit dem Namen "Indizes" erstellen. Diese Dateigruppe befindet sich möglicherweise auf Laufwerk E:\Ihres Servers.

37
codingbadger

ON [PRIMARY] erstellt die Strukturen in der "Primary" -Dateigruppe. In diesem Fall werden der Primärschlüsselindex und die Tabelle in der Datenbank in der Dateigruppe "Primär" abgelegt.

15
Mark S.

Um eine sehr wichtige Anmerkung zu dem hinzuzufügen, was Mark S. in seinem Beitrag erwähnt hat. In dem spezifischen SQL-Skript, das in der Frage erwähnt wurde, können Sie NIEMALS zwei verschiedene Dateigruppen zum Speichern Ihrer Datenzeilen und der Indexdatenstruktur erwähnen.

Der Grund dafür liegt in der Tatsache, dass der in diesem Fall erstellte Index ein Clustered-Index für Ihre Primärschlüsselspalte ist. Die Clustered-Index-Daten und die Datenzeilen Ihrer Tabelle dürfen sich NIEMALS in verschiedenen Dateigruppen befinden .

Wenn Sie also zwei Dateigruppen in Ihrer Datenbank haben, z. PRIMARY und SECONDARY, dann das unten genannte Skript, speichern Ihre Zeilendaten und Clustered-Index-Daten sowohl in der PRIMARY-Dateigruppe selbst, obwohl ich für die Tabellendaten eine andere Dateigruppe ([SECONDARY]) Angegeben habe. Interessanter ist, dass das Skript auch erfolgreich ausgeführt wird (als ich erwartete, dass es einen Fehler gibt, da ich zwei verschiedene Dateigruppen angegeben habe: P). SQL Server macht den Trick hinter den Kulissen leise und intelligent.

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

HINWEIS: Ihr Index kann sich NUR in einer anderen Dateigruppe befinden, wenn der erstellte Index nicht gruppiert ist .

Das folgende Skript, das einen nicht gruppierten Index erstellt, wird stattdessen für die Dateigruppe [SECONDARY] Erstellt, wenn sich die Tabellendaten bereits in der Dateigruppe [PRIMARY] Befinden:

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

Sie erhalten weitere Informationen darüber, wie Sie durch Speichern von nicht gruppierten Indizes in einer anderen Dateigruppe die Leistung Ihrer Abfragen verbessern können. Hier ist ein solcher Link.

6
RBT