木子屋 Dnawo's BLOG

SQL Server外键需不需要建立索引?

👤 dnawo 📅 2012-12-18 👁 6762 👍 0 💬 0 🔄 本站原创
会有这个疑问,我认为主要有两点原因:

·主键"不需要"建立索引,所以外键需不需要建立索引?
·外键本身是另一个表的主键,主键一般有聚集索引,这个索引会不会应用到查询上?

针对第一点,实际情况是主键是有建立索引的,通常就是表的聚集索引,由于在创建主键时自动创建了索引,所以让人错觉主键没有建立索引,因此,不管是主键还是外键,只要有需要,都得创建索引;针对第二点,我们可以做个测试。

在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)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 奥巴马筹款网站的制作过程 下一篇 → Windows7用添加本地打印机方式添加网络打印机