聚集与非聚集索引共存

linguojin11 2010-01-18 09:09:52
create table lin10(id  int,name int)
insert into lin10 select 1,3
insert into lin10 select 2,2
insert into lin10 select 3,1

go
create clustered index index1 on lin10(id)
create index index2 on lin10(name)
select * from lin10

go
drop table lin10
go

在一个表下面创建了一个聚集索引和非聚集索引,但是排序结果却是按非聚集索引,我看了执行计划,里面只说扫描非聚集索引,不是聚集索引优先吗?
如果只有非聚集所以,则是只扫描表不按任何索引,如果只有聚集索引,那么结果是按聚集索引排序。
这样? 呵呵
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2010-01-18
  • 打赏
  • 举报
回复
聚集索引和非聚集索引都按照B树结构进行组织,但是非聚集索引中,B树的叶层是由索引页而不是数据页组成的.
聚集索引则是数据页组成的.
Mr_Nice 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql77 的回复:]
先扫描非聚集索引,然后再利用聚集索引键,堆表就指向行定位器
[/Quote]

原理如上,理解层面可以理解为下:

聚集索引相当于书的目录
非聚集索引相当于书最后几页按照字母顺序,标名重点词的列表

如果两个都有,就先按照字母找到目录顺序号,然后按照目录找到具体内容
也就是1楼说的,先扫描非聚集索引,然后再用聚集索引键,最后堆表中指向行定位器


参考哈!
you_tube 2010-01-18
  • 打赏
  • 举报
回复


是用非聚集索引哇,有什么问题?
SQL77 2010-01-18
  • 打赏
  • 举报
回复
先扫描非聚集索引,然后再利用聚集索引键,堆表就指向行定位器

linguojin11 2010-01-18
  • 打赏
  • 举报
回复
我以为说得在执行计划中应该体现先 非聚集索引扫描,然后聚集索引扫描,?
linguojin11 2010-01-18
  • 打赏
  • 举报
回复
谢谢大家。。我理解了一点
最近是在看邹大哥的那本SQL2005里面的索引内容,里面内容讲到聚集与非聚集索引时有提到一个知识点:非聚集所以指向的是聚集索引的键值。这个应该就是大家所讲的那个知识点吧?,

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧