图例如下:
server层:
Connection Pool :连接池,负责管理持有所有的连接,采用BIO的技术,承载能力有限。此外还进行用户的鉴权,线程重用,内存检查,cache管理等等;
SQL Interface:
Parser:解析器,
Optimizer:优化器,
cache&buffer:缓存,
插件层:各种存在的地方
文件层:数据存储的地方
只有innodb支持事务。
对于myisam来说,它存储了全表的总数记录,所以 select count(*)比较innodb要快;
实际上,查询优化器不一定严格按照这种顺序因此执行顺序不太重要。
innodb引擎默认按照主键索引的结构来存储,索引的结构采用B+树这种数据结构。
为什么采用B+树的存储结构?
MySQL一个页大约是16K,假设常规的表一个记录是1K,一个页大约能存储16个记录;通常情况,主键类型是big int,bing int本身占8个字节一个针指针的大小大约6个字节,一般索引页都是一个主键值跟一个指针,这样就是14个字节,161024/14=1170个数据。B+一般树三层,三层下来是11701170*16 = 2100000;
…