前言
就我个人所知,MySQL目前已经作为绝大数项目的数据库选择。但是经常会需要去处理慢sql导致的各类问题。索引,作为一种常见的处理方式。我们有必要了解下索引的底层是怎么实现的。
思考两个问题:
1.为什么加了索引以后,数据库的查询效率会加快?底层怎么实现的?
2.索引失效的情况有哪些?失效的原因是什么?
简洁描述
索引是快速查找特定列值的行数据的,一种优化查询的数据结构。查找特定列值。例如一条sql里的查询条件是姓名 name = '张三' 。就能查出特定列(姓名列)的特定值(张三)的记录。
另外,它是一种数据结构。那么mysql的数据结构,采用的是B+树。那么,为啥选B+树而不是其他的数据结构。
从数据结构看原理
此处主要讨论下哈希表,平衡二叉树,B树,B+树这4种数据结构,以及为啥选用B+树作为mysql数据库的数据结构。首先看下这四种数据结构示例图。
哈希表
平衡二叉树
B树