·主键"不需要"建立索引,所以外键需不需要建立索引?
·外键本身是另一个表的主键,主键一般有聚集索引,这个索引会不会应用到查询上?
针对第一点,实际情况是主键是有建立索引的,通常就是表的聚集索引,由于在创建主键时自动创建了索引,所以让人错觉主键没有建立索引,因此,不管是主键还是外键,只要有需要,都得创建索引;针对第二点,我们可以做个测试。
在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)
暂无评论。