Sql Server 索引

( 总结自 <SqlServer 实用教程> ) 

    查阅书籍某一章节内容时,为了提高查询速度,可以先查看书的目录索引,找到这一章节在目录的页码,然后根据页码直接找到需要章节.数据库中,为了从大量数据快速找到需要的内容,也采用了类似书目录这样的索引技术.
   索引是根据表中一列或者若干列按照一定循序建立的列值与记录行之间的对应关系表.
1.索引分类
  若表没有索引,则数据行不按任何特定的循序存储,这种结构称为堆集.
  按索引的组织方式,可以将Sql Server索引分为 聚集索引非聚集索引.
  索引是可以唯一的,即不会有两个数据行有相同的索引键值,这样的索引是唯一索引.索引也可以是不唯一的,即多个数据行共享一个键值.
  如果索引是根据多列组合创建的,这样的索引为复合索引.
2.聚集索引
  聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表的物理顺序与索引顺序一致
  Sqlserver 2000按B树组织聚集索引,B树叶结点存放数据页信息.
  一个表只能有一个聚集索引
3.非聚集索引
  非聚集索引独立于数据行结构,Sql Server2000中也是按B树组织非聚集索引.
  与聚集索引的不同在于:非聚集索引B树叶结点不存放数据页信息,而存放非聚集索引的键值,并且每个键值都有指针指向包含该键值的数据行.

  聚集索引:   表中数据行按照(聚集)索引键次序存储
  非聚集索引:独立于数据行,不改变数据行的存储结构.如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储.
  既要创建聚集索引又要创建非聚集索引时,应先创建聚集索引,因为聚集索引改变数据表的物理存储顺序.

来自msdn的有关补充
http://msdn.microsoft.com/zh-cn/library/ms179276(SQL.90).aspx

数据库文件
   SQL Server 2005 数据库具有三种类型的文件:
   主数据文件,主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是 .mdf。
   次要数据文件,除主数据文件以外的所有其他数据文件都是次要数据文件。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
   日志文件, 日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,当然也可以有多个。日志文件的推荐文件扩展名是.ldf。
   在SQL Server 2005中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,SQL Server 数据库引擎使用 master 数据库中的文件位置信息.

    SQL Server 中数据存储的基本单位是页。为数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。
    页的大小为 8 KB。这意味着 SQL Server 数据库中每 MB 有 128 页。每页的开头是 96 字节的标头,用于存储有关页的系统信息。此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元 ID。
  
    区是八个物理上连续的页的集合,用来有效地管理页。所有页都存储在区中。
    区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 KB)。这意味着 SQL Server 数据库中每 MB 有 16 个区。
    为了使空间分配更有效,SQL Server 不会将所有区分配给包含少量数据的表。SQL Server 有两种类型的区:
          统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。
          混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。
    通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。
表结构

              表结构
堆结构

              堆结构
聚集索引结构

        聚集索引结构

非聚集索引结构

           非聚集索引结构

 

PS:

全文索引
    Sql2005 全文索引(一)    http://blog.csdn.net/wufeng4552/archive/2009/10/14/4667405.aspx
    Sql2005 全文索引(二)    http://blog.csdn.net/wufeng4552/archive/2009/10/14/4668288.aspx
    Sql2005 全文索引(三)    http://blog.csdn.net/wufeng4552/archive/2009/10/14/4668484.aspx
    Sql2005 全文索引(四)    http://blog.csdn.net/wufeng4552/archive/2009/10/14/4669907.aspx
 非聚集索引与ORDER BY排序的问题 
                                     http://blog.csdn.net/liangCK/archive/2009/09/11/4543043.aspx
                                     http://www.cnblogs.com/yukaizhao/archive/2008/11/19/index_test.html

 写有效率的sql               http://www.cnblogs.com/cn_wpf/archive/2007/08.html

 MS SQL SERVER 海量数据的查询优化及分页算法
                                     http://www.shoppingday.cn/content/content-18.Html

 Sqlserver分区
       Sql Server 分区演练(入门级例子)
       http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html
       高性能网站建设之 MS Sql Server数据库分区
       http://www.cnblogs.com/yukaizhao/archive/2008/11/27/database_partition_performance.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值