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

数据库索引

时间:2015-05-14 10:08:54      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:数据库   索引   

一、索引的概念

索引的定义

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

如下图:

技术分享

数据库索引的实现方式

索引通常采用 B 树或 B+ 树等结构。索引由索引项组成,索引项由来自表中每一行的一个或多列(搜索关键字)组成。B 树按搜索关键字排序,可以在搜索关键字的任何关键字上进行高效搜索。

为什么需要索引

假设我们不能通过索引定位数据库内的信息,现在需要在学生表中寻找张三,那么我们为了找到他,就得遍历整张表。查找时间将随着表内数据量的增加而增加,这并不会是我们想要看到的结果。

如果引入了索引,我们能直接通过索引定位张三,获得他的相关数据,无论数据量如何增长,查找时间都是O(1),很显然能够减少时间开销。

建立索引的代价

索引无疑能减少数据查找所需要的时间,但创建索引也是需要付出代价的:

1、索引在数据库中会占用一定的存储空间

2、在对数据进行更新(插入、删除、修改)操作时,为使索引和数据保持一致,还需要对索引进行维护

索引的优缺点

优点

  1. 保证数据库表中每一条数据的唯一性

  2. 大大加快数据的检索速度

  3. 加速表与表间的连接

  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

  5. 通过使用索引,可以在查询的过程中,使用优化的隐藏器,提高系统的性能

缺点

  1. 创建索引和维护索引需要花费时间,而且时间将随数据量的增加而增加

  2. 索引需要占物理空间,除了数据表占数据空间以外,每一个索引还要占一定的空间,如果要建立的是聚簇索引,那么需要的空间就会更大

  3. 当对表中的数据进行增加、删除、修改操作时,索引也需要进行动态的维护,这就降低了数据的维护速度

二、索引的分类

聚簇索引

定义

聚簇索引是一种存储方法,使表中的数据与索引存储在相邻物理空间,并使行的物理顺序与索引的顺序保持一致。

适用场景

  1. 键值连续的记录集

  2. 经常要搜索范围值的列

  3. 需要以某种特殊的顺序频繁访问记录、检索相关的记录集

  4. 根据值的范围检索行记录

非聚簇索引

定义

非聚簇索引是:数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。

唯一索引

定义

唯一索引确保索引列不包含重复的值

三、注意事项

虽然索引能大大地提高效率,但并不是每一个数据列都能使用索引的:

适合创建索引的列特点

  1. 经常需要搜索的列

  2. 作为主键的列,强制该列的唯一性和组织表中数据的排列结构

  3. 经常用于连接的列,这些列主要是一些外键

  4. 经常需要根据范围进行搜索的列上

  5. 经常需要排序的列

  6. 经常使用在where子句中的列

不适合创建索引的列特点

  1. 查询中很少使用的或用作参考的列

  2. 很少数据值的列

  3. 定义为 text,img,bit数据类型的列

  4. 修改性能远远大于检索性能的列。

这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。

四、建立索引的原则

  1. 选择数据量较大的表建立索引

  2. 建立索引的数量要适量

  3. 选择合适的时机建立索引

  4. 优先考虑主键列建立聚簇索引

  5. 为支持连接操作,考虑在外键上建立非聚簇索引

  6. 最好选择包含大量非重复值的列建立非聚簇索引

数据库索引

标签:数据库   索引   

原文地址:http://blog.csdn.net/u012403246/article/details/45715831

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