数据库是我们在编程当中最常用到的,上一篇文章是手把手教大家如何搭建数据库。接下来的文章会带大家了解MySQL各个点,了解什么是针对于MySQL的优化。
本文内容:
- MySQL介绍
- MySQL流程
- 查询优化
一、MySQL的介绍
首先Mysql是有MySQLAB公司自主研发的,目前是已经被SUN公司收购了。Mysql也是目前的IT行业当中最流行的开发源码的数据库管理系统之一。同时它是支持多线程高并发多用户的关系型数据库管理系统。
Mysql数据库以简单高效并且可靠的特点,在几年的时间内从一个不被人知到现在是几乎是无人不知的开源数据库管理系统。
目前MySQL已经成为了很流行的开源关系数据库系统,并且是逐步的占领了原有的商业数据库市场。我们都知道的Googl、Facebook、Twitter、百度、新浪等绝大多数的互联网公数据库都是使用MySQL数据库,甚至可以说是核心应用的数据库系统。
而Mysql数据库不仅仅是应用与web项目,其扮演的角色是很丰富的。在网络游戏当中,大部分的后台数据库都是采用的Mysql数据库。我们比较熟悉的游戏:劲舞团、魔兽等;很少看到有哪些网络游戏数据库不是采用Mysql数据库的。此外,mysql数据库已经成功应用于中国外汇交易中心、中国移动等等的很多国家电网等许多的项目当中。
一个数据库的应用系统,这里的数据库应用系统概指所有使用数据库的系统的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的大部分数据操作都是通过数据库管理软件所提供的相关接口来完成的。所以数据库管理软件也就是很自然的成为了数据应用系统的性能瓶颈所在,这是当前行业中比较普遍的看法。
介绍了这么多,我们从今天文章开始,就会进行一个比较全面的分析,让大家了解到一个数据库应用系统的性能到底与什么地方有关。帮助大家寻找出个子应用系统出现的性能问题根本原因,尽可能的清楚自己该如何去优化自己的应用系统。
二、MySQL构架
下面是Mysql的构架总览图:
三、查询执行流程:
(1)查询执行的流程是怎样的:
- 连接
- 客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求
- 将请求转发到‘连接进/线程模块’3调用‘用户模块’来进行授权检查
- 通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求
(2). 处理
- 2.1先查询缓存,检查Query语句是否完全匹配,
- 2.2查询缓存失败则转交给‘命令解析器’
- 2.3再转交给对应的模块处理
- 2.4如果是SELECT查询还会经由‘查询优化器’做大量的优化,生成执行计划
- 2.5模块收到请求后,通过‘访问控制模块’检查所连接的用户是否有访问目标表和目标字段的权限
- 2.6有则调用‘表管理模块’,先是查看table cache中是否存在,有则直接对应的表和获取锁,否则重新打开表文件
- 2.8根据表的meta数据,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理
- 2.9上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中
(3) 结果
- Query请求完成后,将结果集返回给‘连接进/线程模块’
- 返回的也可以是相应的状态标识,如成功或失败等
- ‘连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接