【发布时间】:2012-07-01 19:15:06
【问题描述】:
我有一个关于聚集索引的问题。
在聚集索引中,叶级节点本身按排序顺序保存数据,对吗?
也就是说,每次插入/更新/删除时,节点都会重新洗牌以保持排序顺序。
那么如何按照插入的顺序从中检索数据呢?
假设以下数据按给定顺序插入:1,7,4,5,2,并在该字段上创建聚集索引。
所以数据将按1,2,4,5,7 的顺序在内部存储,对吗?
所以这可能有助于更快地查找特定值,但是如果用户希望按照他插入的顺序排列前 3 个值怎么办?
它们是否可以以某种方式检索,或者我是否必须为插入的每一行分配一个增量 id,在其上声明一个非聚集索引,并根据该 id 字段上的记录排序提供前 3 条记录的数据?
【问题讨论】:
-
是的,您需要添加一个额外的列来表示增量代理,例如identity INT,或者某种形式的自动时间戳机制来重新跟踪原始插入顺序。
-
那么如何选择是对字段值创建聚集索引,还是对id值创建聚集索引呢?是这样的,当更多的查询是这种类型时选择从第3行开始的6行我应该选择id作为聚集键,当查询像选择value = 45的记录比较频繁,我应该在字段值上设置聚集索引吗?
-
但我刚刚了解到,我不能在一个表中创建超过 1 个聚集索引,也不能在同一个表中同时创建聚集索引和非聚集索引。那么如何在此处的 2 个不同字段上创建 2 个索引(其中一个至少应聚集以促进快速查找)?
-
除了零个或一个聚集索引之外,您还可以在一个表上创建许多非聚集索引。
标签: sql indexing clustered-index