四、MySQL索引

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21918021/article/details/89219086

四、MySQL索引

4.1、索引概述

使用索引的主要目的是为了优化查询速度。
索引是一种特殊的文件或者叫数据结构(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

4.2、索引的分类

索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引。

  • MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换 * MEMORY/HEAP存储引擎:支持HASH和BTREE索引
    索引的分类

4.2.1、单列索引

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值。
  • 主键索引:是一种特殊的唯一索引,不允许有空值。

4.2.2、组合索引

在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

4.2.3、全文索引

只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。

4.2.4、空间索引

不做介绍,一般使用不到。

4.3、索引的使用

4.3.1、创建索引

  • 单列索引之普通索引
CREATE INDEX index_name ON table(column(length)) 
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
  • 单列索引之唯一索引
CREATE UNIQUE INDEX index_name ON table(column(length)) 
  • 单列索引之全文索引
CREATE FULLTEXT INDEX index_name ON table(column(length)) 
  • 联合索引
ALTER TABLE article ADD INDEX index_title_time (title(50),time(10))

4.3.2、删除索引

DROP INDEX index_name ON table

4.4、索引的存储结构

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

4.4.1、B Tree和B+ Tree的特点与区别

  • 树的高度一般都是在2-4这个高度,树的高度直接影响IO读写的次数。
  • 如果是三层树结构—支撑的数据可以达到20G,如果是四层树结构—支撑的数据可以达到几十T
  • B Tree和B+ Tree的最大区别在于非叶子节点是否存储数据的问题。B Tree是非叶子节点和叶子节点都会存储数据。而B+ Tree只有叶子节点才会存储数据,而且存储的数据都是在一行上,而且这些数据都是有指针指向的,也就是由顺序的。

4.4.2、非聚集索引

  • 叶子节点只会存储数据行的指针,简单来说数据和索引不在一起,就是非聚集索引。
  • 主键索引和辅助索引都会存储指针的值.

4.4.3、聚集索引(InnoDB)

  • 主键索引(聚集索引)的叶子节点会存储数据行,也就是说数据和索引是在一起,这就是聚集索引。
  • 辅助索引只会存储主键值。
  • 如果没有没有主键,则使用唯一索引建立聚集索引;如果没有唯一索引,MySQL会按照一定规则创建聚集索引。
    在这里插入图片描述

4.5、使用索引的注意事项

  • 尽量创建组合索引(组合索引其实会默认按照最左前缀原则帮我们创建多组索引)

    组合索引(id,name,sex)

  • 索引最左前缀原则

  • 索引覆盖:要查询的列,也要使用索引覆盖住

猜你喜欢

转载自blog.csdn.net/qq_21918021/article/details/89219086