背景
想象一下,你去图书馆找到一本你喜欢看的书,然后你想要快速知道这本书讲了什么内容,有哪些章节,都是通过书开头的“索引”部分,如果想要在一本书中找到某个特定主题,一般会先看书的“索引”,找到对应的页码。
在MySQL中,存储引擎用类似的方法使用索引,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。接下来就来讲讲MySQL的索引吧。
索引
索引是应用程序设计和开发的一个重要方面。如果索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响。要找到一个平衡点,这对于应用程序的性能至关重要。
一些开发程序员总是在开发完之后才想起来添加索引,我一直认为这是一种错误的开发模式。如果知道数据的使用会面临查询的问题,从一开始就应该在需要的地方添加索引。开发人员往往对数据库的使用停留在应用的层面,比如编写SQL语句、存储过程等。他们甚至可能不知道索引的存在,或者认为事后让DBA加上即可。DBA往往不够深入了解业务,而添加索引需要通过监控大量的SQL语句进而从中找到问题,这个步骤所需的时间肯定是远大于初始添加索引所需要的时间,并且可能遗漏一部分的索引。当然索引也并不是越多越好,会占据不必要的磁盘使用率。由此可见添加索引也是非常有技术含量的。
跟索引相关的数据结构
二叉搜索树
二叉搜索树中,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值,并且每个节点最多只有两颗子树,而且最大高度差不超过1。如数据(1,2,3,5,6,7,9)在二叉搜索树的形状:
<