【发布时间】:2011-04-17 14:04:50
【问题描述】:
我的问题 [1] 的子问题:
(我能找到的)(MS SQL Server)索引的所有定义都是模棱两可的,所有基于它的解释都使用未定义或定义不明确的术语来叙述某些事情。
index的解释是什么?
例如,wiki 中最常见的索引定义(http://en.wikipedia.org/wiki/Index_(database)):
- 1) “数据库索引是一种数据结构,它以降低写入速度和增加存储空间为代价提高对数据库表的数据检索操作的速度。可以使用数据库表的一个或多个列创建索引。 ..”
- 2) "SQL server 默认在主键上创建聚集索引[1]。数据以随机顺序出现,但逻辑顺序由索引指定。数据行可能随机分布在整个表中. 非聚集索引树包含排序顺序的索引键,索引的叶级包含指向页的指针和数据页中的行号"
嗯,这是模棱两可的。在索引下可以理解:
- 1) 一个有序的数据结构,一棵树,包含中间节点和叶子节点;
- 2) 叶节点数据包含索引列中的值+“指向页面的指针和数据页面中的行号”
考虑到 2),非聚集索引可以是非唯一的吗?或者,甚至是 1) ?
在我看来不是这样...
但是 TSQL 是否意味着存在非唯一非聚集索引?
如果是,那么“CREATE INDEX (Transact-SQL)”[2] 中的非聚集索引可以理解什么,以及 UNIQUE 参数适用于什么?
是吗:
- 3) 包含索引列值的叶节点数据?即像2)但没有指针+行号)?
如果是 3),那么问题 1) 又出现了 - 为什么要对“索引”中的真实数据的副本应用约束,而不是在原位的真实数据?
更新:
对真实数据行的书签(指针+行号)不是唯一的(唯一标识行)吗?
这个书签不是构成索引的一部分,从而使索引唯一吗?
你能给我索引的定义,而不是解释如何使用它 UNDEFINED 吗?后半部分我已经知道(或者可以自己阅读)。
[1]
“创建 INDEX 的唯一参数 - 有什么用?”
UNIQUE argument for INDEX creation - what's for?
[2]
[创建索引 (Transact-SQL)]
http://msdn.microsoft.com/en-us/library/ms188783.aspx
【问题讨论】:
-
不清楚您想知道什么...您是对 INDEX 的一般定义感兴趣,还是对使用它们感兴趣?
-
是的,只是定义。关于索引非唯一性的问题是修辞。它的应用和实现是众所周知的
标签: sql sql-server tsql indexing terminology