初识 MySQL
一、启动 MySQL 服务器程序
1.1 Unix 中启动服务器程序
-
mysqld
mysqld 这个可执行文件可以直接启动一个服务器进程,但是这个命令不常用。 -
mysqld_safe
mysqld_safe 是一个启动脚本,它会间接的调用 mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助它重启,另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出错误发生的原因。 -
mysql.server
它会间接的调用 mysqld_safe,在调用 mysqld.server 时在后面指定 start 参数就可以启动服务器程序了。
二、服务端处理客户端请求
以查询为例子:连接管理(处理连接) -> 解析与优化(查询缓存、语法解析、查询优化)-> 存储引擎
2.1 连接管理
客户端进程可以采用 TCP/IP、命名管道或共享内存、Unix域套接字这几种方式与服务器进程建立连接,每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。这样就起到了不频繁创建和销毁线程的效果,从而节省开销。
2.2 解析与优化
2.2.1 查询缓存
MySQL 服务器程序会把刚处理过的查询请求和结果缓存起来,如果下次有一模一样的请求过来,直接从缓存中查找结果就好,而且这个查询缓存可以在不同客户端之间共享,也就是说客户端 A 查询了一个语句,B 发送了相同的请求,那么客户端 B 的这次查询可以直接使用缓存中的数据。
缓存失效:MySQL 的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了 Insert、update、delete、truncate table、alter table、drop table、drop database 语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。(注:查询缓存在 MySQL 8.0 中已经被删除)
2.2.2 语法解析
将客户端发来的文本数据进行词法分析、语法分析、语义分析等。
2.2.3 查询优化
MySQL 的优化程序会对我们的语句做一些优化,如外连接转换为内连接、表达式简化、子程序转为连接等,优化的结果就是生成一个执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的。我们可以使用 explain 语句来查看某个语句的执行计划。
2.3 存储引擎
MySQL 服务器把数据的存储和提取操作都封装到了一个叫做存储引擎的模块里。它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
show engines
可以查看支持的存储引擎。
设置表的存储引擎:
- 创建表时指定存储引擎
create table 表名(
建表语句;
) engines = 存储引擎名称;
- 修改表的存储引起
alter table 表名 engines=存储引擎名称;
相关文章: