数据库索引系列一:索引概括

数据库设计中,索引是一个非常重要的内容,mysql中,没有索引,单表查询可能几十万数据就是极限,但大型网站单日就可能产生几十万甚至几百万数据,没有索引的话查询就会非常慢。如:一个一百万的库,没有索引的情况,查询会进行全表搜索,耗时在0.1,则1w条查询耗时1000秒,即16分钟,即如果有一个活动要1w人同时在线的话,他们要16分钟才能都看到一个页面上显示的信息,使用索引后,如果每次查询在0.0001,则只需要16秒,所有用户都能看到这个页面。16秒当然还很长,我们还可以通过其它的方式继续降低查询时间,这里只讲索引。

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

例如这样一个查询:select * from table1 where name='lala';。如果没有索引,必须遍历整个表,直到name等于lala的这一行被找到为止;有了索引之后(必须是在name这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

一、那么现在我们先看看索引有哪些类型吧:
1.唯一索引

唯一索引是不允许任何两行具有相同索引值的索引。表明此索引的每一个索引值只对应唯一的数据记录,对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。
唯一索引防止在表中新增数据时在这一列或多列创建重复的键值数据,例如:如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。
如果有一张表的某列有两行相同的数据,则数据库会拒绝在这一列上增加唯一索引。

2.主键索引

数据库表经常有一列或多列组合,其值唯一标识表中的每一行,该列称为表的主键。为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。

3.聚集索引

在聚集索引中,表中行的物理顺序与索引的逻辑顺序是相同的,一个表只能包含一个聚集索引。与非聚集索引相比,聚集索引在查询是会按顺序进行检索,能够提供更快的数据访问速度。

二、索引可以大大提高系统的性能,但依然也有自己的缺点
索引的优点:

  1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  2. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  3. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
  5. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

索引的缺点:

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
  3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

关于索引,某位大神整理了完整的索引的来龙去脉、结构、sql执行过程与优化,尤其是关于索引结构的部分,看这一篇足以。链接如下:
理解索引(上)
理解索引(中):MySQL查询过程和高级查询
理解索引:MySQL执行计划详细介绍
理解索引:索引优化

你可能感兴趣的:(mysql,数据库,mysql,索引)