假如表有聚集索引,如果没有排序,我们Select 的时候返回给我们的将是按照这个聚集索引排序后的结果,那么是否在物理磁盘上表字段是按照这个聚集键排序的,做个实验。
相关代码为:
CREATE PROCEDURE [dbo].[GetFileNumAndPageNumFromHex]
@first binary(6)
AS
BEGIN
SET NOCOUNT ON;
declare @PageNum int
select @PageNum = convert(int, substring(@first,4,1) + substring(@first,3,1) +
substring(@first,2,1) + substring(@first,1,1) )
declare @FileNum int
select @FileNum = convert(int, substring(@first,6,1) + substring(@first,5,1))
select @FileNum as FileNum, @PageNum as PageNum
END
----------------------------------
CREATE PROCEDURE [dbo].[GetPageDataInformation]
(
@file_id int,
@page_id bigint,
@level int=3
)
AS
BEGIN
DECLARE @iSQL NVARCHAR(100)
SELECT @iSQL=
'dbcc page(''pod_test'','+
CONVERT(VARCHAR(20),@file_id)+','+
CONVERT(VARCHAR(20),@page_id)+','+
CONVERT(VARCHAR(20),@level)+')'
--SELECT @iSQL
dbcc traceon(3604)
EXEC (@iSQL)
END
-----------------------------------------
实验顺序
第一步骤
%20索引1.jpg)
%20索引1.jpg)
然后我们再插入相应的一些数据:
%20索引1.jpg)
%20索引1.jpg)
物理顺序和OFFSET 一致,我们按照OFFSET 排序,看看结果:
%20索引1.jpg)
我们看到,其实它跟我们插入的顺序一致,并不是按照聚集键的顺序(‘1’,‘10’,‘100’,‘101’,……)在物理磁盘上存储的;而我们Select 的时候返回的却是按照Slot 排序的结果。
发表于 @ 2008年10月04日 23:29:00 | 评论( loading... ) | 举报| 收藏