【发布时间】:2015-02-07 20:33:03
【问题描述】:
我有一个问题,与 DB 理论有关:
假设我们有一个包含 3 列的表:[PersonID], [PersonName], [PersonAge]。
我们知道,当我们有一个按一列的非聚集索引时,SQL Server 会按照指定的列对表数据进行排序,并从中构建 B+ 树。当我们需要使用这样的索引查找行时,SQL Server 通过比较一个原子数据对象(例如int 或string)来扫描 B++ 树。很清楚,当我们按一列构建非聚集索引时(假设[PersonName]),非聚集索引是如何工作和查找数据的,但是如果我们按两列创建非聚集索引:[PersonName] 和[PersonAge] 会怎样?
我知道,在排序过程中,最重要的标准将是[PersonName],如果有几条记录相同,那么它们将按[PersonAge] 排序。但是,SQL Server 将如何根据该索引物理处理 B++ 树?
当它应该执行查询时如何使用这样的树
SELECT *
FROM dbo.Person
WHERE [PersonName] = 'Bob' AND [PersonAge] = 45
感谢您的解释。
【问题讨论】:
标签: sql sql-server indexing b-tree non-clustered-index