基于MySQL体系结构的分析


Posted in PHP onMay 02, 2013

了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的

 

基于MySQL体系结构的分析 

1 Connectors指的是不同语言中与SQL的交互

2 Management Serveices & Utilities: 系统管理和控制工具

3 Connection Pool: 连接池。

管理缓冲用户连接,线程处理等需要缓存的需求

4 SQL Interface: SQL接口。

接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

5 Parser: 解析器。

SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。

主要功能:

a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的 

b.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

6 Optimizer: 查询优化器。

SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。

用一个例子就可以理解: select uid,name from user where gender = 1;

这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤

这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤

将这两个查询条件联接起来生成最终查询结果

7 Cache和Buffer: 查询缓存。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

8 Engine :存储引擎。

存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。

Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)

现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB

默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。

InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。 
Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。

PHP 相关文章推荐
PHP 模板高级篇总结
Dec 21 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
PHP程序级守护进程的实现与优化的使用概述
May 02 #PHP
基于Zookeeper的使用详解
May 02 #PHP
关于尾递归的使用详解
May 02 #PHP
基于Zend的Config机制的应用分析
May 02 #PHP
Zend的Registry机制的使用说明
May 02 #PHP
Zend的MVC机制使用分析(二)
May 02 #PHP
Zend的MVC机制使用分析(一)
May 02 #PHP
You might like
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
让PHP支持页面回退的两种方法
2008/01/10 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
js实现交通灯效果
2017/01/13 Javascript
DOM事件探秘篇
2017/02/15 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
JS实现简单打字测试
2020/06/24 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
python开发之thread实现布朗运动的方法
2015/11/11 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
python redis存入字典序列化存储教程
2020/07/16 Python
计算机科学与技术应届生求职信
2013/11/07 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
立春观后感
2015/06/18 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
同事离别感言
2015/08/04 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
Python使用永中文档转换服务
2022/05/06 Python