SQLSERVER中KeyHashValue的作用(上) SQLSERVER中KeyHashValue的作用(下) 原文的标题是:SQLSERVER在索引下如何找到哈希值的随想 现在知道KeyHashValue的作用了,所以就改了标题~ 测试环境:SQLSERVER2005 开发者版 真的不好意思,我做实验的时候到最后还
SQLSERVER中KeyHashValue的作用(上)
SQLSERVER中KeyHashValue的作用(下)
原文的标题是:SQLSERVER在索引下如何找到哈希值的随想
现在知道KeyHashValue的作用了,所以就改了标题~
测试环境:SQLSERVER2005 开发者版
真的不好意思,我做实验的时候到最后还是没有找到这个问题的答案
问题是这样的:
当通过聚集索引查找和非聚集索引查找的时候,通过哈希码来匹配,然后找到相应记录的
既然通过哈希码来匹配,那么就需要一个hash bucket把所有索引页面的所有key/value全部加载到hash bucket
既然要全部加载到hash bucket就需要读取所有的索引页
我的测试脚本,,我使用SET STATISTICS IO ON来测试是否有读取索引页的情况,但是到最后还是找不到规律
master
SCANDB
SCANDB
clusteredtable(c1 INT IDENTITY(1,1), c2 VARCHAR (900))
nonclusteredtable(c1 INT IDENTITY(1,1), c2 VARCHAR (900))
cix_clusteredtable )
ix_nonclusteredtable )
;
;
)
clusteredtable (, 880))
;
;
)
nonclusteredtable (, 880))
clusteredtable nonclusteredtable DBCCResult (
59 PageFID NVARCHAR(200),
60 PagePID NVARCHAR(200),
61 IAMFID NVARCHAR(200),
62 IAMPID NVARCHAR(200),
63 ObjectID NVARCHAR(200),
64 IndexID NVARCHAR(200),
65 PartitionNumber NVARCHAR(200),
66 PartitionID NVARCHAR(200),
67 iam_chain_type NVARCHAR(200),
68 PageType NVARCHAR(200),
69 IndexLevel NVARCHAR(200),
70 NextPageFID NVARCHAR(200),
71 NextPagePID NVARCHAR(200),
72 PrevPageFID NVARCHAR(200),
73 PrevPagePID NVARCHAR(200)
74 )
.DBCCResult )
.TRACEON(3604,-1)
PAGE(SCANDB,1,89,3)
DROPCLEANBUFFERS
)
IO clusteredtable IO (1 行受影响)
。扫描计数 1,逻辑读取 4 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
DROPCLEANBUFFERS
)
IO nonclusteredtable IO (1 行受影响)
。扫描计数 1,逻辑读取 5 次,物理读取 1 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。