MYSQL数据库四种索引类型介绍

tech2023-02-28  111

MYSQL数据库四种索引类型

转自:段远山 链接:传送门

主键索引:

主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。

唯一索引:

索引列的所有值都只能出现一次,即必须唯一,值可以为空。

普通索引 :

基本的索引类型,值可以为空,没有唯一性的限制。

全文索引:

全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。

1.为什么我们添加完索引后查询速度为变快?

传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍 在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据

2.创建索引的缺点

2.1创建索引是为产生索引文件的,占用磁盘空间 2.2索引文件是一个二叉树类型的文件,可想而知我们的dml操作同样也会对索引文件进行修改,所以性能会下降

3.在哪些column上使用索引?

3.1较频繁的作为查询条件字段应该创建索引 3.2唯一性太差的字段不适合创建索引,尽管频繁作为查询条件,例如gender性别字段 3.3更新非常频繁的字段不适合作为索引 3.4不会出现在where子句中的字段不该创建索引 == 总结: 满足以下条件的字段,才应该创建索引. a: 肯定在where条经常使用 b: 该字段的内容不是唯一的几个值 c: 字段内容不是频繁变化。==

MYSQL数据库两种索引方法有几种?

1. HASH

hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value。正是由于这个特性,hash很适合做索引,hash索引可以一次定位。

局限性

1)Hash 索引仅仅能满足"=",“IN"和”<=>"查询,不能使用范围查询。

(2)Hash 索引无法被用来避免数据的排序操作。 由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算; (3)Hash 索引不能利用部分索引键查询。 对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。 (4)Hash 索引在任何时候都不能避免表扫描。

2. BTREE

BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中

BTREE在MyISAM里的形式和Innodb稍有不同

在 Innodb里,有两种形态:一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。二是secondary index,其leaf node和普通的BTREE差不多,只是还存放了指向主键的信息.

而在MyISAM里,主键和其他的并没有太大区别。不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.

最新回复(0)