一.关于索引
1.索引是什么?有什么用?
"索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以引用索引。” 《MySQL入门很简单》
通俗的理解就是索引是一种数据结构,能够帮助我们快速查询到所属要的数据行。是数据库性能优化最常用的工具之一,就像是书本里的目录一样。
2.索引有几种类型?
MySQL的索引共有六种,分别为:普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引。
二.索引的存储结构
存储结构:
MySQL的索引使用的是B+树结构,B+树相当于B-树的优化版本。两者都有着很明显的特点。B-树中:树中的每个节点都存储数据,叶子节点之间没有指针。B+树中:数据只存储在叶子节点,每个叶子节点都增加了链指针,连成了一张链表。
B-树与B+树总结:
B-树:B-树因为数据存储在树内,所以在查询数据的时候查询效率极不稳定,最好的情况为O(1)。不适合做数据的遍历操作。
B+树:因为B+树的数据只出现在叶子节点上,所以查询数据时的查询速度非常稳定,没有快慢之分。B+树由于链指针的存在,连接成了一张有序的链表结构,所以在做整张表的遍历和区间查找时非常适合。并且B+树的高度要小于B树的高度,使用磁盘IO次数更少。
因为B+树有便于查找,查找效率稳定且磁盘IO次数更少,所以MySQL的索引结构选择了B+树而非B树。
三.InnoDB引擎和MyISAM引擎
InnoDB引擎:
在InnoDB引擎下,查询过程中,只需查询一次即可得到所有数据。因为InnoDB引擎下的索引为聚集索引,即数据和索引存储在同一个文件里。并且InnoDB引擎支持事务功能。
在MyISAM引擎下,查询过程中,需要查询两次才可以获得所有数据。因为MyISALM引擎下的索引为非聚集索引,即数据和索引存储在不同的两个文件下。第一次查询到数据保存的物理地址,然后再进行第二次查询物理地址获取数据。