这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战数据库
索引的出现是为了提升数据的查询效率,就像书的目录同样。一本500页的书,若是你想快速找到其中的某一个知识点,在不借助目录的状况下,那我估计你可得找一下子。一样,对于数据库的表而言,索引其实就是它的“目录”。markdown
一样索引也会带来不少负面影响:建立索引和维护索引须要耗费时间,这个时间随着数据量的增长而增长;索引须要占用物理空间,不光是表须要占用数据空间,每一个索引也须要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就下降了数据的维护速度。数据结构
索引的数据结构和具体存储引擎的实现有关,,在MySQL中使用较多的索引有 Hash 索引、B+树索引等。而咱们常常使用的 InnoDB 存储引擎的默认索引实现为 B+ 树索引。post
用 B+ 树不用 B 树考虑的是 IO 对性能的影响,B 树的每一个节点都存储数据,而 B+ 树只有叶子节点才存储数据,因此查找相同数据量的状况下,B 树的高度更高,IO 更频繁。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引所有加载到内存了,只能逐一加载每个磁盘页(对应索引树的节点)。性能