MySQL--索引介绍

索引优化应该是对查询性能最有效的手段,能够轻易将查询性能提高几个数量级。——《高性能MySQL》

什么是索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构

《高性能MySQL》中的定义为:索引(在MySQL中也叫”键(key)“)是存储引擎用于快速找到记录的一种数据结构

索引的优缺点?

优点(目的):在于提高查询效率;

缺点:会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

索引基础

就像汉语字典的目录页(索引),我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。在MySQL中,存储引擎用类似的方法是用索引,其先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行

查询示例

假设要运行下面的查询:

 mysql> SELECT name FROM user WHERE user_id = 5;

如果在user_id列上建有索引,则MySQL将使用该索引找到user_id = 5的行,也就是说,MySQL先在索引上按值进行查找,然后返回所有包含该值的数据行

索引可以包含一个或多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列。创建一个包含两个列的索引和创建两个只包含一列的索引是大不相同的。

索引类型

MySQL目前主要有以下几种索引类型:

1)普通索引 

是最基本的索引,它没有任何限制.

2)唯一索引

与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一.

3)主键索引

是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。

4)组合索引

指多个字段上创建的索引,只有在查询条件中使用了创建一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。

详细介绍请查看我的另一篇文章——组合索引相关介绍

5)全文索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较.主要针对文本文件,比如文章,标题,全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)

主键和唯一索引的区别?

1)主键一定是唯一性索引,唯一性索引并不一定就是主键。

2)一个表中可以有多个唯一性索引,但只能有一个主键。

3)主键列不允许空值,而唯一性索引列允许空值。

补充介绍:

主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。

索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一

应该在哪些字段上添加索引呢?

1、频繁查询的字段(经常出现在where条件后面的字段),应该创建索引。

2、更新不频繁的字段,可以创建索引,更新非常频繁的字段,不应该创建索引,。

3、唯一性太差(有大量数据重复)的字段,比如像性别(sex)字段,就不应该创建索引。因为当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段性别(sex),男女几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

4、不会出现在where条件之后的字段,不应该创建索引。

索引的数据结构是什么?

请查看我的另一篇文章——MySQL的索引结构为什么用B+树

posted @ 2020-02-22 21:40  JustJavaIt  阅读(269)  评论(0编辑  收藏  举报