Ico*_*123 226 sql database sql-server database-design
我正在创建一个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
Run Code Online (Sandbox Code Playgroud)
有谁知道ON [PRIMARY]命令有什么作用?
blo*_*art 231
在Microsoft SQL Server中创建数据库时,您可以拥有多个文件组,其中存储在多个位置,目录或磁盘中创建.可以命名每个文件组.PRIMARY文件组是默认文件组,它始终是创建的,因此您给出的SQL会在PRIMARY文件组上创建表.
有关完整语法,请参阅MSDN.
cod*_*ger 37
它指的是您创建的对象所在的文件组.因此,您的主文件组可以驻留在服务器的驱动器D:\上.然后,您可以创建另一个名为Indexes的文件组.此文件组可以驻留在服务器的驱动器E:\上.
为Mark S.在帖子中提到的内容添加一个非常重要的注释.在问题中提到的特定SQL脚本中,您永远不会提到两个不同的文件组来存储数据行和索引数据结构.
原因是由于在这种情况下创建的索引是主键列上的聚簇索引.表的聚簇索引数据和数据行永远不能位于不同的文件组中.
因此,如果您的数据库上有两个文件组,例如PRIMARY和SECONDARY,那么下面提到的脚本会将您的行数据和聚簇索引数据存储在PRIMARY文件组本身上,即使我已经[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
Run Code Online (Sandbox Code Playgroud)
注意:如果正在创建的索引本质上是非群集的,则索引可以驻留在不同的文件组上.
[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
Run Code Online (Sandbox Code Playgroud)
您可以获得有关如何在不同文件组上存储非聚簇索引可以帮助您的查询更好地执行的更多信息.这是一个这样的链接.
| 归档时间: |
|
| 查看次数: |
104636 次 |
| 最近记录: |