Что означает 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]?
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