简述mysql索引_MYSQL索引概述

MYSQL索引概述

B+树:使用平衡树,可抽象理解为“排好序的快速查找结构”:

MyISAM,InnoDB引擎采用的B-tree索引,NDB引擎使用的是T-tree索引;MEMORY引擎采用的Hash索引

Hash索引与B-tree索引比较:

Hash索引仅仅能满足”=”,”IN”和”<=>”查询,无法对范围查询进行优化;

Hash索引无法利用前缀索引,无法优化排序;

Hash遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

Hash索引在任何时候都不能避免表扫描,通过索引拿到数据位置,必须回到表中取数据,这个与InnoDB的聚簇索引的数据取出方式不同。

聚簇索引:

InnoDB的主键的索引结构中既存储索引值,又存储行的数据,这种结构称为聚簇索引,次索引仅指向对主键的引用。

优势: 根据主键查询条目比较少时,不用回行,因为数据就在主键节点下;

劣势: 如果碰到不规则数据插入时,造成频繁的页分裂。

建议:

InnoDB的buffer_page很强大,聚簇索引的主键值,应尽量是连续增长的值,而不是要是随机值(不要用随机字符串或UUID),否则会造成大量的页分裂与页移动;

(不要用随机字符串或UUID)

非聚簇索引:

MyISAM的主索引和次索引,都指向物理行(磁盘位置)。

索引覆盖:

如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.

这种查询速度非常快,称为”索引覆盖”

主键索引(PRIMARY KEY):是一种特殊的唯一索引,一表只有一个,不能为空,不能设置索引名

PRIMARY KEY [index_type] (index_col_name,...)

唯一索引(UNIQUE KEY):一表可以有多个,可以为空,列值不能重复

UNIQUE [index_name] [index_type] (index_col_name,...)

索引,组合索引(INDEX):

INDEX [index_name] [index_type] (index_col_name,...)

全文索引(FULLTEXT):

[FULLTEXT|SPATIAL] [index_name] (index_col_name,...)

使用全文索引的格式: MATCH (columnName) AGAINST ('string')

外键(FOREIGN KEY):

FOREIGN KEY [index_name] (index_col_name,...)

建议:在数据迁移过程中,先创建表结构插入数据再添加索引这样可以提高批量插入效率

你可能感兴趣的:(简述mysql索引)