欢迎光临

木子屋

标题: SQL Server外键需不需要建立索引？

作者: dnawo

日期: 2012-12-18 11:11 AM

分类: Web编程

内容: 会有这个疑问，我认为主要有两点原因：
·主键"不需要"建立索引，所以外键需不需要建立索引？
·外键本身是另一个表的主键，主键一般有聚集索引，这个索引会不会应用到查询上？
针对第一点，实际情况是主键是有建立索引的，通常就是表的聚集索引，由于在创建主键时自动创建了索引，所以让人错觉主键没有建立索引，因此，不管是主键还是外键，只要有需要，都得创建索引；针对第二点，我们可以做个测试。
在SQL Server 2008创建表并添加测试数据：
复制内容到剪贴板 程序代码--create
create table Person
(
Id int identity(1,1) primary key,
Name nvarchar(20)
)
create table Pet
(
Id int identity(1,1) primary key,
Pid int references Person(Id),
Name nvarchar(20)
)
--data
declare @i int
set @i=1
while(@i<=10000) begin
insert into Person(Name) select CAST(@i as nvarchar(20))
insert into Pet(Pid,Name) select @i,CAST(@i as nvarchar(20))
set @i=@i+1
end
在SQL Server Management Studio中可以看到主键和外键，同时还有一个聚集索引：
我们再使用外键列查询并查看执行计划：
复制内容到剪贴板 程序代码select * from Pet where Pid=1
从图中可以看到，查询是使用本表的聚集索引扫描，也没有用另一个表的索引(用了就怪了:))。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.531 ms

返回

标题: SQL Server外键需不需要建立索引？

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.531 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.547 ms

返回