SQL Server索引进阶第四篇:页和区
上一篇 /
下一篇 2012-09-13 17:10:05
/ 个人分类:数据库
*|w\
B/e0 在上一篇文章中,我们比较了完全相同的查询语句分别在存在聚集索引和非聚集索引的环境下耗费的成本.我们以“逻辑读”作为衡量成本的主要标准。现在就让我们来解释逻辑读作为主要衡量标准的原因以及SQLServer在读取时究竟读取什么。
+p|y:`2eP\051Testing软件测试网O9lP7D2`#m,md
当你提交一个向SQL Server的请求查询时,SQL
Server知道扫描整表一定可以满足这个需求。但如果使用索引进行数据查找的成本要低于整表扫描时,SQL
Server会选择索引。也许你就开始有疑问了,那SQL
Server根据什么因素判断成本呢?主要是磁盘IO,查询所请求的磁盘IO是查询消耗的主要部分,这也许是因为IO占用了最宝贵的两种资源:时间和内
存。
(RPA-o2u#T0#w8['v.L
|(hw\0 扫描整表时SQL Server所引起的I/O很多人都理解的不太正确,因为实际上SQL Server并不会读取行,而是读取页。页和行作为不同粒度的单位对于读取来说是完全不同的。51Testing软件测试网;Ml_
Z om;}|
UXS
m~.N6I0
本篇文章是系列文章中最短的,因为本文主要讲述SQL Server进行IO请求。理解SQL
Server的IO是对于理解很多现象的必要基础,比如为什么某些索引使得查询跑得更快而另一些查询不会,或是为什么某些修改数据的查询比其它查询执行的
更快,亦或是为什么某些维护计划需要更长的时间。总之,对于SQL Server IO的理解是理解本系列文章的后续文章的关键所在
;\4hHm1p3XYx051Testing软件测试网j*_ Ah4P+\&m'}JcF 页
$c-DT
R"c#?b051Testing软件测试网H7Kr5E*cm d 你创建了一个数据库时,
你指定了数据库文件所存储的位置。对于SQL Server来说,每一个文件都是一长串的bytes.SQL
Server逻辑上(仅仅是逻辑上,不是物理上)把这个文件分成N多8K大小的块。这个块就是所谓的页。数据库文件第一个8K的块就是页#0,下一个8K
的块就是页#1,依此类推。页是IO读取的最小单元,SQL Server每一个IO读写都涉及一个页,当然了,对于多个物理上连续的页,SQL
Server也可以用一个IO全部完成。
$KiH:H'D0u
f0