整体架构

存储引擎的区别

MyISAM
MyISAM读的效率是优于Innodb的,这和MyISAM的存储数据的数据结构有关。虽然两个存储引擎使用的都是B+Tree,但是对于MyISAM索引,叶节点存储的是数据的位置。叶节点存储了从跟节点到叶节点之间所有节点数据,而且叶节点之间也是通过指针相互联通。在磁盘上它的数据文件,索引文件也是分开存储的。当进行数据库迁移的时候,可以直接对数据文件拷贝再做一些操作就好了。如下图给出它的索引数据结构:

Innodb
Innodb叶节点存储的是就是数据本身,它不会在当中存储数据的真实位置,叶节点就是数据本身了。除此之外,Innodb所有的文件都会存储在磁盘的一个文件中,包括数据文件,索引文件等。这就会导致Innodb的文件庞大无比,当进行数据重新load的时候会费时费力。下图给出了Innodb的索引数据结构:


memory
内存表的数据部分以数组的方式单独存放,而主键 id 索引里,存的是每个数据的位置。主键 id 是 hash 索引,可以看到索引上的 key 并不是有序的。

或者B-Tree形式
sql语句:alter table t1 add index a_btree_index using btree (id);

参考文章:
MySQL :: MySQL 5.7 Reference Manual :: 14.4 InnoDB Architecture
Comments NOTHING