SQL查询流程:

文章插图
- 1. 通过客户端/服务器通信协议与 MySQL 建立连接
- 2. 查询缓存,这是 MySQL 的一个可优化查询的地方,如果开启了 Query Cache 且在查询缓存过程中查 询到完全相同的 SQL 语句,则将查询结果直接返回给客户端;如果没有开启Query Cache 或者没有查询到 完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成解析树 。
- 3. 预处理器生成新的解析树 。
- 4. 查询优化器生成执行计划 。
- 5. 查询执行引擎执行 SQL 语句,此时查询执行引擎会根据 SQL 语句中表的存储引擎类型,以及对应的 API 接口与底层存储引擎缓存或者物理文件的交互情况,得到查询结果,由MySQL Server 过滤后将查询结 果缓存并返回给客户端 。若开启了 Query Cache,这时也会将SQL 语句和结果完整地保存到 Query Cache 中,以后若有相同的 SQL 语句执行则直接返回结果 。
- error log 错误日志 排错 /var/log/mysqld.log【默认开启】
- bin log 二进制日志 备份 增量备份 DDL DML DCL
- Relay log 中国日志 复制 接收 replication master
- slow log 慢查询日志 调优 查询时间超过指定值
-- 查看错误日志文件路径show variables like 'log_error';+---------------+---------------------+| Variable_name | Value |+---------------+---------------------+| log_error | /var/log/mysqld.log |+---------------+---------------------+-- 慢查询日志文件路径show variables like 'slow_query_log_file';+---------------------+-----------------------------------+| Variable_name | Value |+---------------------+-----------------------------------+| slow_query_log_file | /var/lib/mysql/localhost-slow.log |+---------------------+-----------------------------------+-- bin log 日志文件 需要在 my.cnf 中配置log-bin=/var/log/mysql-bin/bin.logserver-id=2-- 查看 relay log 相关参数show variables like '%relay%'配置文件&数据文件:配置文件 my.cnf:在 my.cnf 文件中可以进行一些参数设置, 对数据库进行调优 。
[client] #客户端设置,即客户端默认的连接参数port = 3307 #默认连接端口socket = /data/mysqldata/3307/mysql.sock #用于本地连接的socket套接字default-character-set = utf8mb4 #编码[mysqld] #服务端基本设置port = 3307 MySQL监听端口socket = /data/mysqldata/3307/mysql.sock #为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件pid-file = /data/mysqldata/3307/mysql.pid #pid文件所在目录basedir = /usr/local/mysql-5.7.11 #使用该目录作为根目录(安装目录)datadir = /data/mysqldata/3307/data #数据文件存放的目录tmpdir = /data/mysqldata/3307/tmp #MySQL存放临时文件的目录character_set_server = utf8mb4 #服务端默认编码(数据库级别)-- 查看数据文件的位置show variables like '%dir%';+-----------------------------------------+----------------------------+| Variable_name | Value |+-----------------------------------------+----------------------------+| datadir | /var/lib/mysql/ |+-----------------------------------------+----------------------------1、.frm文件不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的元数据(meta)信息都存放在此文件中,包括表结构的定义信息等 。2、.MYD文件myisam存储引擎专用,存放myisam表的数据(data) 。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下3、.MYI文件也是myisam存储引擎专用,存放myisam表的索引相关信息 。每一个myisam表对应一个.MYI文件,其存放的位置和.frm及.MYD一样4、.ibd文件存放innoDB的数据文件(包括索引) 。5. db.opt文件 此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规 。MySQL查询和慢查询日志分析:等待时间长:- 1.锁表导致查询一直处于等待状态,后续我们从MySQL锁的机制去分析SQL执行的原理
- 1.查询语句写得烂
- 2.索引失效
- 3.关联查询太多join
- 4.服务器调优及各个参数的设置
- 第一条: 只返回需要的结果
避免使用 select * from , 因为它表示查询表中的所有字段
推荐阅读
- 三国第一名将张辽,三国第一名将张辽
- 如何成为一名优秀的网络推广员
- 做一个坚强独立的女人?成为一名独立自强的女人
- 如何成为一名后端开发工程师
- 假如长大后我成为了一名教师?一位老师改变了一个学生
- 梁羽生武侠人物排名是什么?
- 陆地十大毒蛇 陆地上最毒的蛇第一名
- 中国女富豪第一名 中国美女富豪榜女首富的排名
- 十六国第一名将 古代名将六十四人72名将
- 人生最高级的活法是享受孤独?人活到极致-会赚钱,能独处,常读书
