mySQL数据库索引总结

前言

索引的作用是提升数据库的查询性能的,当数据量很大时,在连接属性或条件查询属性上建立索引,会极大的提升查询的效率。索引是数据库中一种对象文件,在做数据增加、删除、修改时,需要对其进行维护,此时不仅要完成对数据的维护,而且要完成对索引的维护,降低了数据维护的效率

索引分类

聚蔟索引:聚簇索引是数据和索引在一起,索引存放的顺序就是数据记录的顺序,因此一个表仅能有一个聚簇索引,一般我们将主键索引作为聚簇索引。
普通索引:普通索引是数据和索引相分离,索引中的值指向数据的指针,普通索引可以在一个表上创建多个,在mySQL中叫辅助索引。
单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引
唯一索引:索引列中的值必须是唯一的,但是允许为空值,要注意的是唯一性约束和唯一索引是两回事,前者是用来检查数据的正确性,后者用来实现数据查询的优化。但又有联系,如创建唯一性约束时,主动创建唯一索引,唯一性是通过创建唯一索引来实现的
组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合
主键索引:是一种特殊的唯一索引,不允许有空值,创建主键约束时自动创建主键索引,不做特别说明,主键索引自动设置为聚簇索引

索引底层数据结构

Hash索引:Hash索引底层数据结构是Hash表,对于查询单条记录的速度非常快;
B+树索引:B+树索引底层数据结构是平衡多路查找树,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,由各叶子节点指针进行连接,非常适合查询结果返回一个结果集的情况,一般情况下我们使用的是B+树索引;
mySQL通常使用的InnoDB和MyISAM存储引擎采用的是B+树索引;MEMORY/HEAP存储引擎,支持HASH和BTREE索引

InnoDB存储引擎索引方式

聚蔟索引是每张表主键构造成一棵B+树,叶节点中存放整张表的行记录数据,聚集索引的叶子节点也称为数据页,数据页之间用双向链表连接
普通索引也叫辅助索引,叶子节点并不包含行记录的全部数据,叶子节点包含键值以外,还包含对应行数据的聚蔟索引键。当通过辅助索引来查找数据时,存储引擎会遍历辅助索引并通过叶子指针获得指向聚集索引的主键值,通过主键索引来找到一个完整的行信息,因此mySQL使用辅助索引时,需要二次使用主键索引完成的

总结

索引是数据库中非常重要的一种数据库对象,在数据量很大时,能够显著地提高查询性能。但并不是索引越多越好,创建的索引不仅要占空间,而且每次做更新(增加、删除、修改)操作时,还需对其维护,对于更新比较频繁的表显然不适合。如果每次由表中获取的数据很多(如:>记录总数的20%,一般DBMS不会使用索引),查索引,再由索引找记录不如做全表扫描;记录很少,创建的索引也用不上。不宜在值少的列上(字段上)不要建立索引,作用不大,如学生表中性别只有“男”和“女”两个值,加上通过索引找记录的时间消耗,对查找性能几乎没有影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值