Tworzę skrypt instalacyjny SQL i używam skryptu innej osoby jako przykładu. Oto przykład skryptu:
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
Czy ktoś wie, co robi polecenie ON [PRIMARY]?
sql
sql-server
database
database-design
Icono123
źródło
źródło
0
lubfalse
o zapewnienie, że kod działa w stanie wiadomo, co jest logiczne i poprawność problemem, a nie optymalizacji problemem.ON PRIMARY
składnię dwa razy w skrypcie - jeden dla tabeli, a drugi dla ograniczenia tabeli. Co to oznacza w przypadku ograniczenia tabeli pod względem pamięci? Brzmi dla mnie nieistotny lub zbędny. Pod względem składniowym powinno być wystarczające, aby wspomnieć o tym raz na poziomie tabeli, czy też naprawdę można przechowywać tabelę w grupie plików PODSTAWOWYCH i dane o ograniczeniach tabeli w grupie plików PODSTAWOWYCH?Odnosi się do tego, na której grupie plików znajduje się tworzony obiekt. Tak więc podstawowa grupa plików może znajdować się na dysku D: \ serwera. możesz następnie utworzyć inną grupę plików o nazwie Indeksy. Ta grupa plików może znajdować się na dysku E: \ twojego serwera.
źródło
ON [PODSTAWOWY] utworzy struktury w grupie plików „Podstawowy”. W takim przypadku indeks klucza podstawowego i tabela zostaną umieszczone w grupie plików „Podstawowy” w bazie danych.
źródło
Aby dodać bardzo ważną notatkę o tym, co Mark S. wspomniał w swoim poście. W konkretnym skrypcie SQL wspomnianym w pytaniu NIGDY nie można wymieniać dwóch różnych grup plików do przechowywania wierszy danych i struktury danych indeksu.
Powodem tego jest fakt, że indeks tworzony w tym przypadku jest klastrowanym indeksem w kolumnie klucza podstawowego. Dane indeksu klastrowego i wiersze danych tabeli NIGDY nie mogą znajdować się w różnych grupach plików .
Więc jeśli masz dwie grupy plików w bazie danych, np. PODSTAWOWY i WTÓRNY, to niżej wymieniony skrypt będzie przechowywać dane wiersza i dane indeksu klastrowego zarówno w samej grupie plików PODSTAWOWYCH, chociaż wspomniałem o innej grupie plików (
[SECONDARY]
) dla danych tabeli . Co ciekawsze, skrypt również działa poprawnie (gdy spodziewałem się, że spowoduje błąd, ponieważ podałem dwie różne grupy plików: P). SQL Server rozwiązuje ten problem za cicho i elegancko.UWAGA: Twój indeks może znajdować się w innej grupie plików TYLKO, jeśli tworzony indeks nie ma charakteru klastrowego .
Poniższy skrypt, który tworzy indeks nieklastrowany, zostanie utworzony w
[SECONDARY]
grupie plików, gdy dane tabeli już znajdują się w[PRIMARY]
grupie plików:Możesz uzyskać więcej informacji o tym, jak przechowywanie indeksów nieklastrowanych w innej grupie plików może pomóc w lepszej wydajności zapytań. Oto jeden taki link.
źródło