专栏首页程序你好MySQL数据优化总结-查询备忘录

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

一、优化分类

二、测试数据样例

参考mysql官方的sakina数据库。

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

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

3.1、分析慢查询日志文件

3.1.1 tail命令

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

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

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

3.1.2 官方mysqldumpslow工具

mysqldumpslow ,默认随mysql安装。

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

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

3.1.3 pt-query-digest工具

比mysqldumpslow反馈的信息多。

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

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

第一部分

第二部分

第三部分

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

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

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

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

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

1、max()优化

在payment_date上建立索引

建索引后的查询结果

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

2、count()优化

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

错误写法:

正确写法:

七、子查询的优化

一对多的子查询,注意dinstinct

八、group by的优化

优化前

优化前

优化后

优化后

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

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

、limit查询的优化

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

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

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

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

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

十一、索引优化SQL的方法

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

4、数据库表结构优化

4.1 选择合适的数据类型

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

bigint8个字节,varchar15个字节

4.2 数据库的范式化优化

4.4表的垂直拆分

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

4.5 表的水平拆分

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

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

本文分享自微信公众号 - 程序你好(codinghello)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • .Net CSharp语言中When关键字的用法

    c# 6引入了when关键字。when关键字是通过某些特定标准来过滤catch块中的异常的一种方法。后来在c# 7中扩展到case语句。我们将介绍如何在异常处理...

    程序你好
  • 事件驱动微服务体系架构

    如果您是一名企业架构师,您可能听说过微服务架构,并使用过它。虽然您过去可能使用REST作为服务通信层,但是越来越多的项目正在转向事件驱动的体系结构。让我们深入了...

    程序你好
  • 机器学习可以进行信用卡欺诈检测?

    程序你好
  • 快速学习Oracle-多表查询

    我们发现产生的记录数是 56 条,我们还会发现 emp 表是 14 条,dept 表是 4 条,56 正是 emp表和 dept 表的记录数的乘积,我们称其...

    cwl_java
  • 【框架】117:mybatis之动态sql

    主要就学了一个内容,动态sql的使用,它是mybatis框架中非常强大的一个特性。

    刘小爱
  • 用sphinx给PHP加个给力的搜索功能

    最近工作上需要实现搜索功能,尝试了几种方案。虽然最终线上部署的还是最low的方案,但是中间的过程还是比较有意思的。业务上根据关键字查找内容。关键字的出处多来源于...

    写PHP的老王
  • explain 分析sql语句字段的解释

    秋白
  • Fundebug计费标准解释:事件数是如何定义的?

    Fundebug提供了多个不同档位的付费套餐,其主要收费标准是按照事件数来确定的。当前Fundebug各个付费套餐每月的事件数及其价格如下表:

    Fundebug
  • Dan Boneh密码学笔记12

    12.Public key encryption from Diffie-Hellman

    安包
  • JVM 垃圾收集器

    GC算法(引用计数/复制/标清/标整)是内存回收的方法论,垃圾收集器就是算法落地实现。

    万能青年

扫码关注云+社区

领取腾讯云代金券