Per aggiungere una nota molto importante su ciò che Mark S. ha menzionato nel suo post. Nello specifico script SQL che è stato menzionato nella domanda, non è MAI possibile menzionare due diversi gruppi di file per l'archiviazione delle righe di dati e la struttura dei dati dell'indice.
Il motivo è dovuto al fatto che l'indice creato in questo caso è un indice cluster sulla colonna della chiave primaria. I dati di indice cluster e le righe di dati della tabella non possono MAI essere su gruppi di file diversi.
Quindi nel caso in cui nel database ci siano due gruppi di file, ad es. Lo script PRIMARY e SECONDARY quindi sotto menzionato memorizzerà i dati di riga e i dati dell'indice cluster sia sul gruppo di file PRIMARY stesso anche se ho menzionato un gruppo di file diverso ([SECONDARY]
) per i dati della tabella. Più interessante anche lo script viene eseguito correttamente (quando mi aspettavo che desse un errore dato che avevo dato due diversi gruppi di file: P). SQL Server fa il trucco dietro la scena in modo silenzioso e intelligente.
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
NOTA: L'indice può risiedere su un gruppo di file diversa solo se l'indice è stato creato non in cluster di natura.
Lo script di sotto del quale crea un indice non cluster otterrà creato su [SECONDARY]
gruppo di file, invece, quando i dati della tabella si trova già sul gruppo [PRIMARY]
del file:
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
È possibile ottenere ulteriori informazioni su come la memorizzazione non indici raggruppati su un gruppo di file diverso possono aiutare le tue query a ottenere risultati migliori. Here è uno di questi link.
Ciò significa anche che di solito è ** inutile e può essere rimosso in sicurezza ** dallo script. – MGOwen
Sì, allo stesso modo puoi semplicemente omettere le inizializzazioni delle variabili su 0 e false, perché è solo l'impostazione predefinita, giusto? –
@MarkSowul A meno che non si abbia una buona ragione per usarlo per ottimizzare le prestazioni, sì, va bene ometterlo e lasciare che avvenga il default. (Da qui il "solito" MGOwen incluso). Inizializzare le variabili a '0' o' false' significa assicurarsi che il tuo codice funzioni in uno stato conosciuto, che è un problema logico e di correttezza e non un problema di ottimizzazione. – jpmc26