Wat*_* v2 5 sql database sql-server reference sql-server-2014
如果我有一张像这样的桌子:
CREATE TABLE MyTable
(
Id INT PRIMARY KEY IDENTITY(1, 1),
FooId INT NOT NULL FOREIGN KEY REFERENCES Foo(Id),
Data NVARCHAR(10) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
可以提出以下意见:
将Id 在表MyTable的主键列上创建聚集索引。
此外,可以推断,将在表Foo上为其名为 的主键创建聚集索引Id。
题:
还会为Foo.Id 表 MyTable 上的外键创建索引吗?
换句话说,是为依赖表上的每个外键隐式创建的非聚集索引。
换句话说,在此模式中创建的索引总数是否为 2,如下所示:
Id表上主键的聚集索引MyTable。Id表主键上的聚集索引Foo。或者会不会有以下3个指标:
Id表上主键的聚集索引MyTable。Id表主键上的聚集索引Foo。Foo(Id)表上外键的非聚集索引MyTable。我的问题与 Microsoft SQL Server 2014 有关。
不,它不是自动创建的。手动创建它是一个好习惯:
与主键约束不同,当为表定义外键约束时,默认情况下 SQL Server 不会创建索引。
但是,开发人员和数据库管理员手动添加它们的情况并不少见
CREATE TABLE MyTable(
Id int PRIMARY KEY IDENTITY(1, 1),
FooId int NOT NULL FOREIGN KEY REFERENCES Foo(Id),
Data nvarchar(10) NOT NULL,
);
exec sp_helpIndex 'MyTable'
index_name index_description index_keys
PK__MyTable__3214EC0742A69968 clustered, unique, primary key located on PRIMARY Id
Run Code Online (Sandbox Code Playgroud)
显式索引创建:
CREATE TABLE MyTable (
Id int PRIMARY KEY IDENTITY(1, 1),
FooId int NOT NULL FOREIGN KEY REFERENCES Foo(Id),
Data nvarchar(10) NOT NULL,
INDEX FK_FooId nonclustered(FooId) -- inline syntax
);
exec sp_helpIndex 'MyTable'
index_name index_description index_keys
FK_FooId nonclustered located on PRIMARY FooId
PK__MyTable__3214EC0779B032FB clustered, unique, primary key located on PRIMARY Id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |