# 索引

## 定义
索引（Index）是帮助MySQL高效获取数据的数据结构

## 目的
索引的目的在于提高查询效率，可以类比字典，如果要查“mysql”这个单词，我们肯定需要定位到m字母，然后从下往下找到y字母，再找到剩下的sql。如果没有索引，那么你可能需要把所有单词看一遍才能找到你想要的，如果我想找到m开头的单词呢？或者ze开头的单词呢？是不是觉得如果没有索引，这个事情根本无法完成？

## 什么是B-Tree(B+Tree)?

## 为什么选择B-Tree？
• 机械磁盘的工作方式  
• IOPS(IO Per Second)，7200/60=120  
• 操作系统读取磁盘数据的方式：block read (8k)  
• B-Tree 节点长度 等于 block size 效率最好  

## 为什么使用数据索引能提高效率？
• 数据索引的存储是有序的  
• 在有序的情况下，通过索引查询数据无需遍历索引记录，类似二分查找，查询效率O(LogN)  
• 在进行索引分析和查询优化时，可以将数据索引字段想象为单一有序序列，并以此作为分析的基础  

## 参考资料
* [数据结构: B+Tree及其应用](https://zhuanlan.zhihu.com/p/24455663)
* [MySQL 入门教程](http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html)
* [MySQL索引背后的数据结构及算法原理](http://blog.codinglabs.org/articles/theory-of-mysql-index.html)
