Что означает ON [PRIMARY]?



Я создаю сценарий установки SQL, и я использую чужой скрипт в качестве примера. Вот пример скрипта:



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


кто-нибудь знает, что делает команда ON [PRIMARY]?

704   4  

4 ответов:

при создании базы данных в Microsoft SQL Server вы можете иметь несколько групп файлов, где хранилище создается в нескольких местах, каталогах или дисках. Каждая группа файлов может быть названа. Основная группа файлов-это группа по умолчанию, которая всегда создается, и поэтому SQL, который вы дали, создает вашу таблицу в основной группе файлов.

посмотреть MSDN для полного синтаксиса.

Это относится к какой файловой группе находится объект, который вы создаете. Таким образом, ваша основная файловая группа может находиться на диске D:\ вашего сервера. затем можно создать другую файловую группу, называемую индексами. Эта файловая группа может находиться на диске E:\ вашего сервера.

ON [PRIMARY] создаст структуры в "первичной" файловой группе. В этом случае индекс первичного ключа и таблица будут помещены в "первичную" файловую группу в базе данных.

добавить очень важное замечание о том, что Марк С. упомянул в своем посте. В конкретном сценарии SQL, который был упомянут в вопросе, вы никогда не можете упомянуть две разные группы файлов для хранения строк данных и структуры данных индекса.

причина заключается в том, что индекс, создаваемый в этом случае, является кластеризованным индексом в столбце первичного ключа. данные кластеризованного индекса и строки данных вашей таблицы никогда не могут быть в другом файле группы.

поэтому, если у вас есть две группы файлов в вашей базе данных, например первичная и вторичная, то ниже упомянутый скрипт будет хранить ваши данные строк и данные кластеризованного индекса как в самой первичной группе файлов, даже если я упомянул другую группу файлов ([SECONDARY]) для данных табл. Более интересно, что скрипт также успешно работает (когда я ожидал, что он выдаст ошибку, поскольку я дал две разные группы файлов :P). SQL Server делает трюк за кулисами тихо и Бойко.

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

Примечание: ваш индекс может находиться в другой группе файлов только в том случае, если создаваемый индекс не является кластеризованным по своей природе.

ниже скрипт, который создает некластеризованный индекс будет создан на [SECONDARY] файловая группа вместо этого, когда данные таблицы уже находятся на [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

вы можете получить дополнительную информацию о том, как хранение некластеризованных индексов в другой группе файлов может помочь вашим запросам выступить лучше. здесь является одним из таких ссылок.

Comments

    Ничего не найдено.