MySQL数据优化总结-查询备忘录

数据库 MySQL
参考mysql官方的sakina数据库,使用mysql慢查询日志对有效率问题的sql进行监控,教你如何通过慢查日志发现有问题的sql。

一、优化分类

MySQL数据优化总结-查询备忘录

 

二、测试数据样例

参考mysql官方的sakina数据库。

三、使用mysql慢查询日志对有效率问题的sql进行监控

MySQL数据优化总结-查询备忘录

 

***个,开启慢查询日志。第二个,慢查询日志存储位置。第三个,没有使用索引的也会记录到慢查询日志中。第四个,超过1秒之后的查询记录到慢查询日志中(通常设置100ms)。

3.1、分析慢查询日志文件

3.1.1 tail命令

tail -50 /home/mysql/sql_log/mysql_slow.log,输入文件中的尾部内容,即末尾50行数据.

我们抽出其中一条,查看,如下图所示。

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

 

query_time,查询耗时(单位秒);lock_time,锁表时间。rows_sent,发送请求的行数;rows_examined,查询数据导致扫描表用到的行数。

3.1.2 官方mysqldumpslow工具

mysqldumpslow ,默认随mysql安装。

mysqldumpslow -h,可查询工具支持的命令。

MySQL数据优化总结-查询备忘录

 

mysqldumpslow -s r -t 10 /var/lib/mysql/localhost-slow.log | more ,返回结果如下图所示。

MySQL数据优化总结-查询备忘录

 

3.1.3 pt-query-digest工具

比mysqldumpslow反馈的信息多。

MySQL数据优化总结-查询备忘录

 

pg-query-digest --help 查看帮助,查看使用命令。

pg-query-digest /var/lib/mysql/localhost-slow.log,查询结果如下。

MySQL数据优化总结-查询备忘录

***部分

MySQL数据优化总结-查询备忘录

第二部分

MySQL数据优化总结-查询备忘录

第三部分

四、如何通过慢查日志发现有问题的sql

MySQL数据优化总结-查询备忘录

 

五、通过explain查询和分析sql的执行计划

MySQL数据优化总结-查询备忘录

 

const常数查找,一般来说,针对主键和唯一索引;eq_reg,一般主键或是唯一索引范围查找;ref,常见于连接查询中;range,对于索引的范围查找;

index,对于索引的扫描;all,表扫描。

MySQL数据优化总结-查询备忘录

 

六、count()和max()的优化

MySQL数据优化总结-查询备忘录

 

1、max()优化

在payment_date上建立索引

MySQL数据优化总结-查询备忘录

建索引后的查询结果

可以看出,直接通过索引结构,就能查询出***日期。覆盖索引,是指完全可以通过索引获得查询结果。

2、count()优化

count(*)包含null值,count(id)不包含

错误写法:

MySQL数据优化总结-查询备忘录

 

正确写法:

MySQL数据优化总结-查询备忘录

 

七、子查询的优化

一对多的子查询,注意dinstinct

MySQL数据优化总结-查询备忘录

 

八、group by的优化

MySQL数据优化总结-查询备忘录

优化前

MySQL数据优化总结-查询备忘录

优化前

MySQL数据优化总结-查询备忘录

优化后

MySQL数据优化总结-查询备忘录

优化后

MySQL数据优化总结-查询备忘录

优化后,减少io,提高效率,节省服务器资源

灵活使用子查询和连接查询

、limit查询的优化

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

缺点:分页limit越往后,扫描行数越多,io操作越大

MySQL数据优化总结-查询备忘录

缺点:id连续。主键连续增长,分页查询更快

十、如何选择合适的列建立索引

MySQL数据优化总结-查询备忘录

 

如果是覆盖索引,可直接从索引结构中获取数据,这样最快;索引字段越小,数据库数据存储以页为单位,每次io所获取的数据量就大。

通过select count(dinstinct customer_id)查看离散度。离散度大的列,可选择性越高。

十一、索引优化SQL的方法

索引提高查询,但是会影响inset,update,delete。

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

 

4、数据库表结构优化

4.1 选择合适的数据类型

MySQL数据优化总结-查询备忘录

时间类型上,时间戳和int占用字节相同;not null需要额外字段存储,

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

bigint8个字节,varchar15个字节

4.2 数据库的范式化优化

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

 

4.4表的垂直拆分

MySQL数据优化总结-查询备忘录

例如,将新闻表的内容拆分到单独一个表

4.5 表的水平拆分

MySQL数据优化总结-查询备忘录

 

MySQL数据优化总结-查询备忘录

前台用拆分后的表,后台用汇总表

总结的很随意,纯粹方便查看知识点 

责任编辑:庞桂玉 来源: 今日头条
相关推荐

2013-08-29 10:50:48

移动网站性能优化移动web

2018-12-24 21:40:12

2011-04-11 10:03:32

钱伯斯思科

2011-08-16 18:38:23

Core Animat动画

2020-11-02 10:41:33

备忘录模式

2017-03-21 11:02:59

基础深度学习备忘录

2014-04-17 10:30:41

Linux 命令黑白备忘录

2023-10-10 15:26:30

内存泄露OOM

2016-03-03 10:09:26

2022-08-01 13:59:04

数据库通信ArkUI

2011-12-07 09:19:49

JavaJ2MEBicaVM

2021-03-08 00:12:44

Grid 备忘录 函数

2011-05-20 09:12:48

AMD北京云基地云计算

2019-04-30 11:15:51

正则表达式JS前端

2024-05-15 17:41:37

备忘录模式多线程

2011-08-31 10:34:47

JavaJava备忘录

2022-04-07 08:00:00

Javascript开发

2023-10-31 09:07:16

备忘录模式保存

2023-12-31 12:05:42

Markdown语法链接

2023-10-07 00:14:53

点赞
收藏

51CTO技术栈公众号