time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > SQL Server索引和表体系结构(二)非聚集索引体系结构

SQL Server索引和表体系结构(二)非聚集索引体系结构

时间:2014-06-13 16:05 点击:1920次 字体:[ ]




非聚集索引

概述

     对于非聚集索引,涉及的信息要比聚集索引更多一些,由于整个篇幅比较大涉及接下来的要写的“包含列的索引”,“索引碎片”等一些知识点,可能要结合起来阅读理解起来要更容易一些。非聚集索引和聚集索引一样都是B-树结构,但是非聚集索引不改变数据的存储方式,所以一个表允许建多个非聚集索引;非聚集索引的叶层是由索引页而不是由数据页组成,索引行包含索引键值和指向表数据存储位置的行定位器,

既可以使用聚集索引来为表或视图定义非聚集索引,也可以根据堆来定义非聚集索引。非聚集索引中的每个索引行都包含非聚集键值和行定位符。此定位符指向聚集索引或堆中包含该键值的数据行。

正文

  • 单个分区中的非聚集索引结构

SQL Server索引和表体系结构(二)非聚集索引体系结构_www.fengfly.com

非聚集索引 Index_id>1 可以结合语句查询

  1. SELECT o.name AS table_name,p.index_id, i.name AS index_name , au.type_desc AS allocation_type, au.data_pages, partition_number,p.rows,  
  2. x.first_page,x.root_page,x.first_iam_page,x.filegroup_id,x.total_pages,x.used_pages  
  3. FROM sys.allocation_units AS au  
  4.     JOIN sys.partitions AS p ON au.container_id = p.partition_id  
  5.     JOIN sys.objects AS o ON p.object_id = o.object_id  
  6.     JOIN sys.indexes AS i ON p.index_id = i.index_id AND i.object_id = p.object_id  
  7.     join sys.system_internals_allocation_units as x on au.container_id=x.container_id    
  8. ORDER BY o.name, p.index_id; 

非聚集索引行中的行定位器或是指向行的指针,或是行的聚集索引键,如下所述:

  • 如果表是堆(意味着该表没有聚集索引),则行定位器是指向行的指针。该指针由文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID (RID)。

     

如果表有聚集索引或索引视图上有聚集索引,则行定位器是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 将添加在内部生成的值(称为唯一值)以使所有重复键唯一。此四字节的值对于用户不可见。仅当需要使聚集键唯一以用于非聚集索引中时,才添加该值。SQL Server 通过使用存储在非聚集索引的叶行内的聚集索引键搜索聚集索引来检索数据行。

  • 非聚集索引与聚集索引相比:

A)叶子结点并非数据结点
B)叶子结点为每一真正的数据行存储一个“键-指针”对
C)叶子结点中还存储了一个指针偏移量,根据页指针及指针偏移量可以定位到具体的数据行。
D)类似的,在除叶结点外的其它索引结点,存储的也是类似的内容,只不过它是指向下一级的索引页的。



本文地址 : http://www.fengfly.com/plus/view-215076-1.html
标签: SQL Server 索引 体系结构 非聚集索引
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: