MySQL一直以来了解不多。在写sql准备提交到生产环境之前,老员工帮我检查了sql,让我修改存储引擎。当时用的是Myisam,后来改用InnoDB。为什么要改成这个?之前没听说过存储引擎,于是上网查了一下。其实使用不同的存储引擎是有很大区别的,看下面就知道了。1、存储引擎的比较注:上面提到的B-tree索引并不是说它是B-Tree和B+Tree索引,而是B-tree和B+树的定义不同。在MySQL中,主要有四种索引,分别是:B-Tree索引、Hash索引、Fulltext索引和R-Tree索引。B-Tree索引是MySQL数据库中最常用的索引类型,除了Archive存储引擎之外的所有存储引擎都支持B-Tree索引。Archive引擎直到MySQL5.1才支持索引,并且只支持索引单个AUTO_INCREMENT列。不仅在MySQL中,实际上在很多其他数据库管理系统中,B-Tree索引也是最重要的索引类型,主要是因为B-Tree索引的存储结构在数据库的数据检索中起着重要的作用.很好的表现。一般来说,MySQL中B-Tree索引的物理文件大部分存储在BalanceTree的结构中,即实际需要的所有数据都存储在Tree的LeafNode中,任意一个Leaf的长度Node的最短路径完全一样,所以我们都称它为B-Tree索引。当然,各种数据库(或者MySQL的各种存储引擎)在存储自己的B-Tree索引时,可能会稍微修改一下存储结构。例如Innodb存储引擎的B-Tree索引实际使用的存储结构实际上是B+Tree,即在B-Tree数据结构的基础上做了一个小的修改,存储索引键在每个LeafNode上除了保存LeafNode的相关信息外,还保存了指向与LeafNode相邻的下一个LeafNode的指针信息(增加了顺序访问指针),主要是出于加快效率的考虑检索多个相邻的叶节点。InnoDB是Mysql(Mysql5.5.5之前的MyISAM)默认的存储引擎。对索引一无所知的猿友可能很难看懂这篇文章。需要这样的猿友对Mysql索引有一个大概的了解。可以看另一篇文章:数据库查询优化-Mysql索引http://blog.csdn.net/u013142781/article/details/51424174看完这篇文章,我们回过头来看看上面的文字说明。接下来,我们来看看B-tree和B+树的概念。弄清楚为什么加索引会加快查询速度?二、B-tree、B+树的概念B-tree是二叉搜索树:1.所有非叶子节点至多有两个儿子(Left和Right);2.All节点存储一个关键字;3、非叶子节点的左指针指向比其关键字小的子树,右指针指向比其关键字大的子树;如:B-tree是一棵多路搜索树(且不是二叉树):1.定义任意一个非叶子节点至多有M个儿子;M>2;2、根节点的儿子个数为[2,M];3.除根节点以外的非叶节点该点的儿子个数为[M/2,M];4、每个节点至少存储M/2-1(向上取整)最多M-1个关键字;(至少2个关键字)5.非-叶子节点的关键字数=指向sons-1的指针数;6.非叶子节点的关键字:K[1],K[2],...,K[M-1];K[i]
