一名高级的Javaer,应该了解的 MYSQL 高级知识点

SQL查询流程:

一名高级的Javaer,应该了解的 MYSQL 高级知识点

文章插图
 
  • 1. 通过客户端/服务器通信协议与 MySQL 建立连接
  • 2. 查询缓存,这是 MySQL 的一个可优化查询的地方,如果开启了 Query Cache 且在查询缓存过程中查 询到完全相同的 SQL 语句,则将查询结果直接返回给客户端;如果没有开启Query Cache 或者没有查询到 完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成解析树 。
  • 3. 预处理器生成新的解析树 。
  • 4. 查询优化器生成执行计划 。
  • 5. 查询执行引擎执行 SQL 语句,此时查询执行引擎会根据 SQL 语句中表的存储引擎类型,以及对应的 API 接口与底层存储引擎缓存或者物理文件的交互情况,得到查询结果,由MySQL Server 过滤后将查询结 果缓存并返回给客户端 。若开启了 Query Cache,这时也会将SQL 语句和结果完整地保存到 Query Cache 中,以后若有相同的 SQL 语句执行则直接返回结果 。
MySQL物理文件:日志文件:
  • 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.服务器调优及各个参数的设置
需要遵守的优化原则:
  • 第一条: 只返回需要的结果
一定要为查询语句指定 WHERE 条件,过滤掉不需要的数据行
避免使用 select * from , 因为它表示查询表中的所有字段


推荐阅读