admin

非群集索引在SQL Server中的工作方式

sql

我有一个与数据库理论有关的问题:

假设我们的表格有3列:[PersonID], [PersonName], [PersonAge]

我们知道,当我们使用一列的非聚集索引时,SQL Server会根据指定的列对表数据进行排序,并从中建立B
+树。而当我们需要找到使用这种指数的行,SQL服务器通过比较一个原子数据对象(扫描基础B
+树int或者string,例如)。这是明确的,指数如何非集群工程和查找数据时,我们通过一列(假设构建它[PersonName]),但是如果我们通过2列上创建非聚集索引:[PersonName][PersonAge]

我了解,在排序标准中,最重要的条件是[PersonName],如果多个记录具有相同的标准,则将按进行排序[PersonAge]。但是,基于该索引,SQL
Server在物理上如何处理B ++树?

当它执行查询时它将如何使用这样的树

SELECT * 
FROM dbo.Person 
WHERE [PersonName] = 'Bob' AND [PersonAge] = 45

感谢您的解释。


阅读 187

收藏
2021-06-07

共1个答案

admin

非聚集索引将与只有一个列几乎相同-但是B ++导航树中的每个索引条目将具有 两个 列值(PersonName, PersonAge)

由于两列都是可比较的,因此将应用明确定义的顺序-
首先按PersonName,然后按PersonAge-,这样您的导航树项将看起来像这样(如果看成一个平面列表):

Alice,42
Alice,57
Andrew,31
Anthony,23
...
...
Bertrand,48
Bob,34
Bob,39
Bob,44 
Bob,45
Bob,58
......
Zachary,19

当您运行查询时

SELECT * 
FROM dbo.Person 
WHERE [PersonName] = 'Bob' AND [PersonAge] = 45

然后SQL Server将导航B ++导航树-
首先查看PersonName,直到找到的所有出现Bob,然后扫描所有的Bob来查找您要查找的(或者可能找不到)。

2021-06-07