SQL Server中聚集表的物理顺序如何影响查询性能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1784个文字,预计阅读时间需要8分钟。
对MS SQL Server数据库,存在几个容易让人产生误解的问题,很多SQL Server DBA对此都有错误认知或认识不足。以下将简要介绍几篇论文,以帮助理解这些易错问题。
对于MS SQL server 数据库,有几个容易让人产生误解的问题,对于这几个问题,即使很多 SQL server DBA 都有错误认识或者认识不充分,所以我想撰文几篇,把这些容易理解错误的问题前前后后深入阐述一下,也希望纠正一下网上对这几个问题的讹传(我也可能有认识不对的地方,欢迎批评指正)。
第一个问题:聚集表的物理顺序问题。这个问题很有迷惑性,因为很多教科书在讲到聚集索引的时候都会出现“聚集索引是按照聚集键的排序顺序物理地存储数据” 类似的说法,因此我们很容易产生以下几种误解:
误解一:“按顺序物理地存储”就是磁盘本身;
误解二:聚集表的页在物理上是顺序的;
误解三:聚集表的页在物理上是顺序的,并且是连续的。
下面我们分别说明上面三种观点确实是误解。
对于误解一,我们必须要了解数据行如何被存储在数据页上。
上图是我从MSDN上截来的,从上图可以看到,在每个数据页的末尾,都有一个“行偏移量”的数组,这个数组记录了每一个数据行的开头在页面中的起始位置,即每行数据开头应该从页头偏移多少个字节。我将上图改了一下,可能更便于正确理解:
我改编的这个图中表示,从这个数据页头偏移96个字节即是第一行数据的开始位置,偏移200字节即是第二行数据的开始位置,偏移300个字节即是第三行数据的开始位置。
下面我们举个实际的例子来说明聚集表的数据在一个数据页上可能的样子。
本文共计1784个文字,预计阅读时间需要8分钟。
对MS SQL Server数据库,存在几个容易让人产生误解的问题,很多SQL Server DBA对此都有错误认知或认识不足。以下将简要介绍几篇论文,以帮助理解这些易错问题。
对于MS SQL server 数据库,有几个容易让人产生误解的问题,对于这几个问题,即使很多 SQL server DBA 都有错误认识或者认识不充分,所以我想撰文几篇,把这些容易理解错误的问题前前后后深入阐述一下,也希望纠正一下网上对这几个问题的讹传(我也可能有认识不对的地方,欢迎批评指正)。
第一个问题:聚集表的物理顺序问题。这个问题很有迷惑性,因为很多教科书在讲到聚集索引的时候都会出现“聚集索引是按照聚集键的排序顺序物理地存储数据” 类似的说法,因此我们很容易产生以下几种误解:
误解一:“按顺序物理地存储”就是磁盘本身;
误解二:聚集表的页在物理上是顺序的;
误解三:聚集表的页在物理上是顺序的,并且是连续的。
下面我们分别说明上面三种观点确实是误解。
对于误解一,我们必须要了解数据行如何被存储在数据页上。
上图是我从MSDN上截来的,从上图可以看到,在每个数据页的末尾,都有一个“行偏移量”的数组,这个数组记录了每一个数据行的开头在页面中的起始位置,即每行数据开头应该从页头偏移多少个字节。我将上图改了一下,可能更便于正确理解:
我改编的这个图中表示,从这个数据页头偏移96个字节即是第一行数据的开始位置,偏移200字节即是第二行数据的开始位置,偏移300个字节即是第三行数据的开始位置。
下面我们举个实际的例子来说明聚集表的数据在一个数据页上可能的样子。

