SQL语句的执行过程
下面是MySQL数据库包含的存储引擎,默认是InnoDB存储引擎
如上图所示,是SQL语句的执行过程:
①首先在客户端输入用户名和密码进行登录,连接器会验证客户端输入的用户名和密码的有效性,如果全部正确,就获取该用户对应的权限,用户在当前连接里面的所有操作,必须在权限范围内,如果超出了权限,就不允许执行;
在5.7版本以前,MySQL有缓存,缓存SQL语句对应的结果,但是必须保证两个SQL语句一模一样,才能使用到缓存,否则就要重新去执行SQL语句,去存储引擎里面进行查询和返回。大体来说,缓存并没有特别大的用处。所以从5.8以后,就去掉了缓存。
所以如果是在5.7版本以前,连接以后会去查询缓存。
②分析器进行词法分析和语法分析
③执行SQL,这个步骤分为三个小部分:prepare、optimize、execute
optimize阶段主要是在所有的执行计划里面选择最优的,需要考虑的是IO成本和CPU成本,必须:如果当前查询语句可以使用的索引有多个,就需要在所有的索引里面根据规则选择最优的索引,根据IO成本和CPU成本确定SQL执行计划
execute阶段是执行确定的SQL执行计划,和存储引擎进行交互,然后把对应的查询结构返回给客户端
MySQL数据库存储引擎
InnoDB
默认是InnoDB存储引擎,支持事务
事务的特性:ACID(原子性、一致性、隔离性、持久性)
事务的隔离级别:读未提交、读已提交、可重复读、串行化
MyISAM
不支持事务