SQL server 数据库之“索引”详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server 数据库之“索引”详解相关的知识,希望对你有一定的参考价值。
什么是索引?
数据库中的索引与书籍中的目录类似,索引使SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。
索引页是数据中存储索引的数据页。索引页存放检索数据行的关键字页及该数据行的地址指针。通过使用索引,可以大大提高数据库的检索速度、改善数据库性能。
索引的分类
1、唯一索引
唯一索引不允许两行具有相同的索引值。创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但是为了获得最佳性能,建议使用主键约束。
2、主键索引
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。
主键索引要求主键中的每个值时唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
3、聚集索引
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。
4、非聚集索引
非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置。非聚集索引使表中各行数据存放的物理顺序与键值的逻辑顺序不匹配,聚集索引比非聚集索引有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。
在SQL Server中,一个表只能创建一个聚集索引,但可以将多个非聚集索引。设置某列为主键,该列就默认为聚集索引。
5、复合索引
在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合为索引,这种索引称为符合索引。
需要注意的是,只有用到复合索引的第一列或整个复合索引列作为条件完成数据查询时才会用到该索引。
6、全文索引
全文索引使一种特殊类型的基于标记的功能性索引,由SQL Server中全文引擎服务创建和维护。全文索引主要用于大量文本中搜索字符串,此时使用全文索引的效率将大大高于使用T-SQL的LIKE关键字的效率。
由于SQL server 图形化操作,创建索引比较简单,就略过创建步骤了,创建索引后,可以像查字典时选择拼音方式或笔画方式一样,指定SQL server数据查询的索引查询方式,T-SQL语句如下:
select * from xueyuan #指定查询的表
with (index=ix_name) #指定要依据的索引
where 学员姓名 like ‘孙%‘ #查询条件
虽然可以指定SQL server 按哪个索引进行查询,但一般不需要我们人工指定,SQL server 将会根据所创建的索引,自动优化查询。
使用索引可加快数据检索速度,但为每个列都建立索引没有必要。因为索引自身也需要维护,并且占用一定的资源,可以按照以下标准选择建立索引的列。
- 频繁搜索的列。
- 经常用于查询选择的列。
- 经常排序、分组的列。
- 经常用于连接的列(主键/外键)。
不要使用下面的列创建索引。
- 仅包含几个不同值得列。
- 表中仅包含几行,为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长。
在SQL 语句中,特别是在select语句中正确使用索引可以大大提高查询速度,保证应用程序的运行性能。提供几条经验,仅供大家参考:
- 查询时尽量减少使用“星号”返回全部列,不要返回不需要的列。
- 索引应该尽量小,在字节数小的列上建立索引。
- where 字句中有多个条件表达式时,包含索引列的表达式应置于其他表达式之前。
- 避免在order by 字句中使用表达式。
- 根据业务数据发生频率,定期重新生成或重新组织索引,进行碎片整理。(因为在SQL server中,索引数据是由系统自动维护的,在增加、删除和修改数据后,索引数据可能会更新。随着长期频繁的数据更新,索引数据会分散在磁盘的不同位置,形成碎片,由此造成查询速度越来越慢,因此,根据数据更新的频率,定期删除原有索引,重新创建相同的索引,让索引存放在连续的空间中,以此删除碎片,可提高查询速度。)
以上是关于SQL server 数据库之“索引”详解的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解
SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解