Ich erstelle ein SQL-Setup-Skript und verwende das Skript eines anderen als Beispiel. Hier ist ein Beispiel für das Skript:
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] bewirkt?
sql
sql-server
database
database-design
Icono123
quelle
quelle
0
oderfalse
wird sichergestellt, dass Ihr Code in einem bekannten Zustand ausgeführt wird . Dies ist ein logisches und korrektes Problem und kein Optimierungsproblem.ON PRIMARY
Syntax zweimal im Skript - eine für die Tabelle und eine für die Tabelleneinschränkung. Was bedeutet es im Falle der Tabellenbeschränkung in Bezug auf die Speicherung? Es klingt für mich irrelevant oder überflüssig. Syntaktisch hätte es ausreichen müssen, es einmal auf Tabellenebene zu erwähnen, oder ist es wirklich möglich, die Tabelle in der PRIMARY-Dateigruppe und die Tabelleneinschränkungsdaten in der NON-PRIMARY-Dateigruppe zu speichern?Es bezieht sich auf die Dateigruppe, in der sich das von Ihnen erstellte Objekt befindet. Ihre primäre Dateigruppe könnte sich also auf Laufwerk D: \ Ihres Servers befinden. Sie können dann eine andere Dateigruppe namens Indizes erstellen. Diese Dateigruppe befindet sich möglicherweise auf Laufwerk E: \ Ihres Servers.
quelle
ON [PRIMARY] erstellt die Strukturen in der Dateigruppe "Primary". In diesem Fall werden der Primärschlüsselindex und die Tabelle in der Dateigruppe "Primär" in der Datenbank abgelegt.
quelle
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 in Ihrer Primärschlüsselspalte ist. Die Clustered-Indexdaten und die Datenzeilen Ihrer Tabelle dürfen sich NIEMALS in verschiedenen Dateigruppen befinden .
Wenn Sie also zwei Dateigruppen in Ihrer Datenbank haben, z. B. PRIMARY und SECONDARY, speichert das unten genannte Skript Ihre Zeilendaten und Clustered-Indexdaten sowohl in der PRIMARY-Dateigruppe selbst, obwohl ich
[SECONDARY]
für die Tabellendaten eine andere Dateigruppe ( ) erwähnt habe . Interessanter ist, dass das Skript auch erfolgreich ausgeführt wird (als ich erwartet hatte, dass es einen Fehler gibt, da ich zwei verschiedene Dateigruppen angegeben hatte: P). SQL Server erledigt den Trick hinter den Kulissen leise und intelligent.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
[SECONDARY]
stattdessen für die Dateigruppe erstellt, wenn sich die Tabellendaten bereits in der[PRIMARY]
Dateigruppe befinden:Sie können weitere Informationen darüber erhalten, wie das Speichern von nicht gruppierten Indizes in einer anderen Dateigruppe die Leistung Ihrer Abfragen verbessern kann. Hier ist ein solcher Link.
quelle