MySQL - 数据库优化相关

目录

一、版本选择

二、MySQL体系结构

2-1 MySQL C/S结构

2-1-1 TCP/IP连接

2-1-2 SOCKET文件连接

2-2 MySQL实例

2-2-1 mysqld 三层结构

三、MySQL的逻辑结构

四、SQL 语句

4-0 SQL语句的操作对象

4-1 SQL类型(满足SQL92标准)


一、版本选择

Oracle MySQL、MariaDB、PerconaDB

市场主流版本:mysql 5.6(5.6.36,5.6.38,5.6.40)、5.7(5.7.18,2.7.20,5.7.22)

企业版本选择:6-12个月之间的GA版本

下载包下载选择:Source Code 需要编译后形成二进制的源码包、一般使用二进制版本,只要解压即可使用

二、MySQL体系结构

2-1 MySQL C/S结构

连接的两种方式:TCP/IP - (适用远程和本地)、SOCKET文件连接(仅适用本地连接)

2-1-1 TCP/IP连接

2-1-2 SOCKET文件连接

2-2 MySQL实例

实例 ≈ mysqld(后台守护进程) + 内存结构

2-2-1 mysqld 三层结构

连接层

  1. 提供连接协议(TCP、Socket)
  2. 用户验证
  3. 提供专用链接线程

SQL层

  1. 接受上层命令
  2. 语法检测
  3. 语义(SQL类型)、权限
    1. SQL类型:DDL(数据定义语言)、DCL(数据控制语言)、DML(数据操作语言)、DQL(数据查询)
  4. 专用解析器解析SQL,解析成多种执行计划
  5. 优化器,用于选择一个成本带价最低的执行计划(CPU、IO、MEM)
  6. 按照优化器的选择,执行SQL语句,得出获取数据的方法
  7. 查询缓存(默认关闭),将执行过的语句放入缓存内,用于之后同语句的查询快速返回结果
    1. 查询缓存开启的缺点:存入缓存的是语句的hash值,若hash值不同,即使结果相同也无法使用缓存内的语句。
    2. 一般使用redis产品替代查询缓存
  8. 记录日志(查询日志、二进制日志) - 可用于将来的数据恢复

存储引擎层

  1. 按照SQL层的结论(获取数据的方法),查询到相应数据,结构化成表形式

三、MySQL的逻辑结构

  • 库(schema) - 存储表的地方(本质是目录)
  • 表(Table)- 二维表
    • 元数据
      • 表名
      • 表属性(表大小、表权限、存储引擎、字符集等)
      • 列 - 列名、列属性(数据类型、约束等)
    • 数据行(真实数据)
      • 记录 - 数据行

四、SQL 语句

4-0 SQL语句的操作对象

  • 库、表

4-1 SQL类型(满足SQL92标准)

  • DDL(数据定义语言)
    • 基于库操作
      • CREATE DATABASE、DROP DATABASE、ALTER DATABASE
      • SQL语句规范
        • 关键字大写(非必须)、字面量小写 (必须)- CREATE DATABASE dbtest CHARSET utf8mb4;
        • 库名只能是小写,不能由数字开头,不能是预留关键字
        • 库名必须和业务相关 - his_user;
        • 必须加字符集 - CHARSET utf8mb4;
    • 基于表操作
      • CREATE TABLE、DROP TABLE、ALTER TABLE
      • SQL语句规范
        • 关键字大写(非必须)、字面量小写 (必须)
        • 表名只能是小写,不能由数字开头,不能是预留关键字
        • 表名必须和业务相关
        • 必须加字符集和存储引擎
        • 使用合适的数据类型
        • 必须存在主键
        • 尽量添加非空
        • 字段唯一性
        • 必须添加注释
        • 避免使用外键
        • 建立合理的索引(基于表上的链建立索引)
  • DCL(数据控制语言)
    • grent、revoke、lock
  • DML(数据操作语言)
    • insert、update、delete
    • SQL语句规范
      • insert语句按批量插入数据
      • update必须where条件
      • delete尽量替换为update操作
      • 清空全表需求,推荐使用truncate(物理清空),不推荐使用delete(逐条删除)
  • DQL(数据查询)
    • select、show
    • SQL语句规范
      • select语句避免使用*语句批量查询 - select * from t1; --替换成--> select id.name from t1
      • select语句尽量加等值的where条件 - select * from t1 where id=20;
      • select语句范围查询,尽量添加limit或者使用and条件进行切片
      • select语句where条件不要使用 != 或 <> 或 like'%name'模糊查询 或 not、in、not exist
      • join表连接不能出现3表以上的表连接,避免子查询
      • where条件中不要出现函数操作

猜你喜欢

转载自blog.csdn.net/qq_33961117/article/details/86473902
今日推荐