mysql数据库体系结构图:
网上找的很容易理解,掌握其结构还是很有必要的,有助于我们的对mysql深入理解和优化
mysql由以下几个部分组成:
1、连接池组件,如连接数量限制,线程数量,内存检测
2、管理服务和工具组件
3、SQL接口组件-执行器执行DML,DDL,视图,触发器等
4、查询分析解析器组件-分析查询语句
5、优化器组件-主要对查询做优化
6、缓冲组件
7、插入式存储引擎
8、物理文件
连接池组件
管理缓冲,线程连接等缓存需求,用户验证等。
管理服务和工具组件
系统管理与控制,另外一些数据库工具使用也在这里 如mysql 启动,导出,关闭等,数据库系统自身管理
解析器组件
主要是解析查询语句,形成解析树,解析过程是这样的:
(1)分析语法是否正确
(2)查询缓存,如果缓存中有就直接返回结果,不做优优化器步骤
优化器组件
优化器主要是对查询做优化,数据的读取方式,索引使用方式,往往我们做SQL查询优化会对直接影响优化器组件解析SQL,他采用的是“选取-投影-关联”的方式进行查询的,例如:select user_id,user_name from user where mobile=xxxxx,这个语句首先执行where 后面的语句进行筛选,而不是将表中所有数据查询出来再过滤 ,其次是将user_id,user_name 进行投影,选取这两个字段,而不是将所有的字段取出再进行过滤,最后将两个结果进行关联。
缓存组件
缓存有buffer和cache,他们之间的区别详见:;
存在一个命中率问题,当查询语句时会先走缓存组件,如果没有再去查训数据文件。他有多种分类有表缓存,记录缓存,key缓存等
存储引擎
他主要和数据库物理文件打交道,查询,增加,删除,修改物理文件,现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB,他们各自有各自的特点,如 InnoDB支持事务
上图中提到锁的管理,首先要明白锁的由来是为了支持并发保证数据的安全,如在查询的同时也在修改数据这样会出现我查询到的结果不对,请去理解脏读和欢读,一般常用的锁有共享锁和排他锁,按照锁的粒度又分为:表锁,行锁,死锁
转载于: