码迷,mamicode.com
首页 > 数据库 > 详细

Sql Server系列:索引基础

时间:2014-11-26 20:52:22      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   使用   sp   strong   文件   

1. 索引概念

  索引用于快速查找在某个列中某个特定值的行,不使用索引,数据库必须从第1条记录开始读完整个表,知道找出需要的行。表越大,查询数据所花费的时间越多。如果表中查询的列有索引,数据库能快速到达一个位置去查找数据,而不必遍历所有数据。

  索引是一个单独的、存储在磁盘上的数据库结构,包含对数据表里所有记录的引用指针。使用索引用于快速找出一个或多个列中有特定值的行,对相关列使用索引是降低查询操作时间的最佳途径。索引包含由表或试图中的一列或多列生成的键。

  索引的优点:

  ◊ 通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。

  ◊ 可以大大加快数据的查询速度,这也是创建索引的最主要的原因。

  ◊ 实现数据的参照完整性,可以加速表和表之间的连接。

  ◊ 在使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的时间。

  索引的缺点:

  ◊ 创建索引和维护索引需要耗费时间,并且随着数据量的增加所消耗的时间会增加。

  ◊ 索引需要占用磁盘空间,除了数据表占数据空间之外,每一个索引还要占用一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件大小。

  ◊ 当对表中的数据进行添加、修改和删除的时候,索引需要动态维护,这样降低了数据的维护速度。

2. 索引的分类

  SQL Server中索引有两种:聚集索引和非聚集索引。它们的区别是在物理数据的存储方式上。

2.1> 聚集索引

  聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。

  创建聚集索引时需要考虑的几个因素:

  ◊ 每个表只能有一个聚集索引

  ◊ 表中的物理顺序和索引中行的物理顺序是相同的,创建任何非聚集索引之前要首先创建聚集索引,这是因为聚集索引改变了表中行的物理顺序。

  ◊ 关键值的唯一性使用UNIQUE关键字或者由内部的唯一标识符明确维护。

  ◊ 在索引的创建过程中,SQL Server临时使用当前数据库的磁盘空间,所以要保证有足够的空间创建聚集索引。

2.2> 非聚集索引

  非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页的数据按列排序。非聚集索引包含索引键值和指向表数据存储位置的行定位器。

  可以对表或索引视图创建多个非聚集索引。设计非聚集索引是为了改善经常使用的、没有建立聚集索引的查询的性能。

  查询优化器在查找数据值时,先查找非聚集索引以找到数据值在表中的位置,然后直接从该位置检索数据。这使得非聚集索引成为完全匹配查询的最佳选择,因为索引中包含所查找的数据值在表中的精确位置的项。

  考虑使用非聚集索引的查询情况:

  ◊ 使用JOIN或GROUP BY子句。应为连接和分组操作中所涉及的列创建多个非聚集索引,为任何外键列创建聚集索引。

  ◊ 包含大量唯一值的字段。

  ◊ 不返回大型结果集的查询。创建筛选索引以覆盖从大型表中返回定义完善的行子集的查询。

  ◊ 经常包含在查询的搜索条件中的列。

3. 创建索引

  SQL Server中创建索引的两中方法:在SQL Server Management Studio的对象资源管理器中,通过图形化工具创建或使用T-SQL语句创建。

3.1> 使用SQL Server Management Studio对象资源管理器创建

  ◊ 在【对象资源管理器】中,展开【数据库】找到需要创建索引的数据表节点,展开该节点下的子节点,右击【索引】节点,在弹出的快捷菜单中选择【新建索引】->【非聚集索引】。

bubuko.com,布布扣

  ◊ 在打开的【新建索引】界面选择需要创建索引的列,进而创建索引。

bubuko.com,布布扣

bubuko.com,布布扣

 

Sql Server系列:索引基础

标签:style   blog   http   io   ar   使用   sp   strong   文件   

原文地址:http://www.cnblogs.com/libingql/p/4124346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!