MySQL讲义第15讲——索引(INDEX)概述
文章目录
- MySQL讲义第15讲——索引(INDEX)概述
- 一、使用索引的优点
- 二、使用索引的缺点
- 三、索引的使用原则
- 四、索引的分类
- 1、根据索引的存储结构划分
- 2、根据索引所包含的列数划分
- 3、根据索引对数据的要求划分
索引包含了对表中所有记录的引用指针,通俗地说,索引好比是一本书前面的目录,能加快数据库的查询速度,索引用于快速找出在某个列中有一特定值的行。当执行查询操作时,如果不使用索引,MySQL 必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 能够快速到达一个位置去搜索数据文件,而不必查看所有数据。MySQL 索引的存储类型有两种:BTREE 和 HASH,也就是用树或者Hash值来存储索引字段。
一、使用索引的优点
使用索引可以加快数据的查询速度。
例如:有一张 person 表,其中有 2W 条记录,记录着 2W 个人的信息。有一个 Phone 字段记录每个人的电话号码,现在想要查询出电话号码为 xxxx 的人的信息。如果没有索引,将从表中第一条记录一条条往下遍历,直到找到该条信息为止。如果根据 Phone 字段创建了索引,会将该字段通过一定的方法进行存储,当查询该字段上的信息时,能够快速找到对应的数据,而不必再去遍历 2W 条数据了。
二、使用索引的缺点
虽然通过创建索引可以提供查询数据的速度,但过多的创建索引也存在一些问题。
1、创建索引和维护索引需要耗费时间,并且随着数据量的增加所耗费的时间也会增加。因此,不要创建非必要的索引。
2、索引需要占用存储空间。
3、当对表中的数据进行增删改操作时,索引也需要动态的维护,降低了数据维护的速度。
三、索引的使用原则
通过对索引优缺点的分析,应该知道:索引并不是越多越好,而是根据自己的需要创建索引,创建索引的原则如下:
(1)经常进行数据更新的表要避免创建过多的索引,而经常用于查询的字段应该创建索引。
(2)数据量小的表最好不要使用索引。如果数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短。
(3)如果一个字段的值大量重复,则不要创建索引,比如学生表的性别字段上只有男,女两个不同值。
四、索引的分类
1、根据索引的存储结构划分
按索引的存储结构分为 BTREE 索引和 HASH 索引。MyISAM 和 InnoDB 存储引擎,只支持 BTREE 索引;MEMORY 和 HEAP 存储引擎,支持 BTREE 索引和 HASH 索引。
2、根据索引所包含的列数划分
根据索引所包含的列数分为单列索引和组合索引。
(1)单列索引:一个索引只包含一个列。
(2)组合索引:根据表中多个字段的组合创建索引。只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀原则。
3、根据索引对数据的要求划分
根据索引对数据的要求分为普通索引、唯一索引和主键索引。
(1)普通索引:MySQL 中基本的索引类型,对数据没有什么限制,允许在定义索引的列中插入重复值和空值。
(2)唯一索引:要求索引列中的值必须唯一,但是允许为空值。
(3)主键索引:是一种特殊的唯一索引,除了要求索引列中的值必须唯一之外,还不允许有空值。