数据库索引杂谈1

 

●聚集索引结构           
    在SQL Server中,索引是按B+树结构来进行组织的。聚集索引的数据排列顺序与数据的物理排列顺

序相同。       


●聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致.           
  聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,           
  因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。         

  聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,      
  而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。           
  建议使用聚集索引的场合为:
       ①此列包含有限数目的不同值; 
    ②查询的结果返回一个区间的值; 
    ③查询的结果返回某值相同的大量结果集。 

 
●非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,
  聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,
  而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,
  添加记录不会引起数据顺序的重组. 
  建议使用非聚集索引的场合为:
    ①此列包含了大量数目不同的值; 
    ②查询的结束返回的是少量的结果集; 
    ③WHERE字句用经常使用的列。
    ④经常需要连接或分组的列。 
    ⑤order   by   子句中使用了该列。
涵盖索引可以提高查询性能,因为符合查询要求的全部数据都存在于索引本身中。也就是说,只需要索

引页,而不需要表的数据页或聚集索引来检索所需数据,因此,减少了总体磁盘 I/O。例如,对某一表

(其中对列 a、列 b 和列 c 创建了组合索引)的列 a 和列 b 的查询,仅仅从该索引本身就可以检索

指定数据。将插入或修改尽可能多的行的查询写入单个语句内,而不要使用多个查询更新相同的行。仅使用一个语句,就可以利用优化的索引维护。评估查询类型以及如何在查询中使用列。例如,在完全匹配查询类型中使用的列就适合用于非聚集索引或聚集索引。

 

 列注意事项
设计索引时,应考虑以下列准则:

     对于聚集索引,请保持较短的索引键长度。另外,对唯一列或非空列创建聚集索引可以使聚集索引获益

     不能将 ntext、text、image、varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型的列指定为索引键列。不过,varchar(max)、nvarchar(max)、varbinary(max) 和 xml 数据类型的列可以作为非键索引列参与非聚集索引。

 

xml 数据类型的列只能在 XML 索引中用作键列。

检查列的唯一性。在同一个列组合的唯一索引而不是非唯一索引提供了有关使索引更有用的查询优化器

的附加信息。有关详细信息,请参阅唯一索引设计指南。

      在列中检查数据分布。通常情况下,为包含很少唯一值的列创建索引或在这样的列上执行联接将导致长

时间运行的查询。这是数据和查询的基本问题,通常不识别这种情况就无法解决这类问题。例如,如果

物理电话簿按姓的字母顺序排序,而城市里所有人的姓都是 Smith 或 Jones,则无法快速找到某个人。

有关数据分布的详细信息,请参阅索引统计信息。

如果索引包含多个列,则应考虑列的顺序。用于等于 (=)、大于 (>)、小于 (<) 或 BETWEEN 搜索条件

的 WHERE 子句或者参与联接的列应该放在最前面。其他列应该基于其非重复级别进行排序,就是说,从

最不重复的列到最重复的列。
      例如,如果将索引定义为 LastName、FirstName,则该索引在搜索条件为 WHERE LastName = 'Smith' 或 WHERE LastName = Smith AND FirstName LIKE 'J%' 时将很有用。不过,查询优化器不会将此索引用于基于 FirstName (WHERE FirstName = 'Jane') 而搜索的查询。

考虑对计算列进行索引。

 索引的特征
在确定某一索引适合某一查询之后,可以选择最适合具体情况的索引类型。索引包含以下特性:

聚集还是非聚集

唯一还是非唯一

单列还是多列

索引中的列是升序排序还是降序排序

您也可以通过设置选项(例如 FILLFACTOR)自定义索引的初始存储特征以优化其性能或维护。有关详细

信息,请参阅设置索引选项。而且,通过使用文件组或分区方案可以确定索引存储位置来优化性能。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值