数据库mysql第一讲
基础架构:一条SQL查询语句是如何执行的?
select * from T where ID=10;
MySQL可以分为Server层和引擎层。
Server层包括连接器、查询缓存、分析器、优化器、执行器等。
存储层负责数据的存储和提取。其架构模式是插件式,支持InnoDB、MyISAM、Memory等多个存储引擎。
语句执行顺序:
连接器
第一步,先使用连接器连接到数据库。连接成功后,如果处于空闲状态,可以使用show processlist命令中看到它。
客户端如果长时间没动静,连接器会自动断开,这个时间由参数wait_timeout控制,默认是8小时。
数据库中,长连接:连接成功后,如果客户端持续有请求,则一直使用同一个连接;短连接:每次执行完很少的几次查询就断开连接,下次查询在重新建立一个。
为防止MySQL占用内存过大,如果用的是MySQL5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行mysql_reset_connection来重新初始化连接资源。
查询缓存
数据库拿到一个查询请求后,会先查询缓存看看,之前是否执行过这条语句,之前执行的语句及其结果会以key-value对的形式,被直接缓存在内存中。
将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不适用查询缓存,而对于确定使用查询缓存的语句,可以用SQL_CACHE显示指定。
mysql> select SQL_CACHE * from T where ID=10;
MySQL8.0将查询缓存的整块功能删掉了。
分析器
分析器会先做词法分析,然后做语法分析。
优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
执行器
开始执行的时候,要先判断你对这个表有没有执行查询的权限,如果没有,就会返回没有权限的错误。