mysql查询优化相关技术

公司dba团队分享了mysql查询优化相关技术,感觉干货比较多,脱敏重新排版分享下

分享整体内容如下,共计3节21点

  1. 查询优化
    1. SQL查询执行顺序
    2. Where条件相关性能问题
    3. 子查询(in/exist)相关
    4. 分组排序相关
  2. 索引优化
  3. 事务

0x01 SQL查询执行顺序

执行顺序 SQL关键字 执行内容 说明
8 SELECT 根据选择的字段,结果写入虚拟表T8
9 DISTINCT 字段 对SELECT的结果T8执行去重后, 写入虚拟表T9
1 FROM 左表 as a 对FROM中的左表与右表执行笛卡尔积,生成虚拟表T1 每步操作结果都会生成一个虚拟表, 这里用T加执行顺序号来命名
3 LEFT JOIN 右表 as b 如指定了左外连接,会将左表中存在,但右表不存在的行,添加到T2表,生成虚拟表T3; 如果FROM中包含多个表, 则会将T3与下一表重复执行步骤1~3 Join类型: Inner: 内联接, 等值连接 Outer: 外连接, 常用的Left join(以左表记录为基准), Right join(以右表记录为基准)
2 ON a.id = b.id 对T1表应用on条件筛选, 符合条件的行写入虚拟表T2 Inner jojn中on 与where条件效果相同; left join中on与where条件效果不同;
4 WHERE 条件 对T3表应用where条件过滤, 符合条件的记录写入T4表
5 GROUP BY 字段 根据group by中字段 , 对T4执行分组,生成虚拟表T5 注意:不在GROUP BY中的字段,如果出现在SELECT中,都要使用聚合类函数,不推荐下面的写法: Select a,b, sum(c) from t Group by a
6 WITH ROLLUP [CUBE] 对T5结果,按不同维度执行统计,生成虚拟表T6 GROUP BY ROLLUP(A,B,C) 结果 (A,B,C),(A,B), (A) GROUP BY CUBE(A,B,C)结果 (A,B,C),(A,B)(A,C),(B,C)(A),(B),(C)
7 HAVING 条件 对T6结果执行过滤,结果写入虚拟表T7
10 ORDER BY 字段 对DISTINCT后的结果T9, 执行排序后写入虚拟表T10 这部分可以使用字段别名, 字段运算或按字段顺序号执行排序操作
11 LIMIT 对T10取出指定行数据记录后,返回最终结果
Read more   2020/4/17 posted in  规范 SQL

编程范式

收集常用的编程的范式

spring boot+mybatis编程范式

  1. 创建mybatis和数据库映射文件 mapper/xxx.xml
  2. 创建mybatis的mapper文件和mapper/xxx.xml结合: @Mapper
  3. 创建Service文件调用mybatis的mapper文件操作数据库
2019/9/30 posted in  规范

整理现行规范中没有明确的规范

sonarqube 检测3A以上

可以使用docker搭建sonarqube检测服务器: https://github.com/SonarSource/docker-sonarqube

java

遵守阿里巴巴的p3c规范:https://github.com/alibaba/p3c

php

遵守psr规范: https://psr.phphub.org/

c#

无官方,暂行:https://gist.github.com/zhuqling/a2700703d088b8746f0c

数据库

  1. 字段长度尽量使用2的次幂,做计算机字节长度对齐,比如 varchar(16)

redis

  1. 通用的redis key不用加项目前缀
  2. 多个单词或者值之间使用:进行分割,符合阿里云Redis开发规范,同时在rdm等客户端中可以显示层级
2018/4/13 posted in  规范

58到家MySQL军规升级版

一、基础规范

  • 表存储引擎必须使用InnoDB

  • 表字符集默认使用utf8,必要时候使用utf8mb4

解读:

(1)通用,无乱码风险,汉字3字节,英文1字节

(2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它

Read more   2018/4/13 posted in  规范

华为JAVA编程规范

规范一:【避免在程序中使用魔鬼数字,必须用有意义的常量来标识。】

是否是魔鬼数字要基于容易阅读和便于全局替换的原则。

比如:0、1作为某种专业领域物理量枚举数值时必须定义常量,严禁出现类似NUMBER_ZERO的“魔鬼常量”。

规范二:【明确方法的功能,一个方法仅完成一个功能。】

Read more   2018/4/13 posted in  规范

完整阿里云 Redis 开发规范

本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。

  • 键值设计
  • 命令使用
  • 客户端使用
  • 相关工具

通过本文的介绍可以减少使用Redis过程带来的问题。

一、键值设计

1、key名设计

可读性和可管理性

Read more   2018/4/13 posted in  规范 Redis