一、优化分类

二、测试数据样例

参考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 表的水平拆分

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

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

MySQL数据优化总结-查询备忘录的更多相关文章

  1. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  2. MySQL数据操作与查询笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...

  3. 《MySQL数据操作与查询》- 综合项目 - 学生管理系统

    <MySQL数据操作与查询>综合项目需求 一.系统整体功能 维护学生信息.老师信息和成绩信息. 支持按多种条件组合查询学生信息和成绩信息. 二.系统的信息需求 一个班级有一个讲师一个班主任 ...

  4. mysql性能优化-慢查询分析、优化索引和配置

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  5. Mysql数据优化--DBA梳理珍藏篇

    1. 优化SQL 1)     通过show status了解各种sql的执行频率 show status like 'Com_%'        了解 Com_select,Com_insert 的 ...

  6. [转]mysql性能优化-慢查询分析、优化索引和配置

    一. 优化概述 MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在 ...

  7. mysql性能优化-慢查询分析、优化索引和配置【转】

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  8. mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍

    MySQL索引介绍 聚集索引(Clustered Index)----叶子节点存放整行记录辅助索引(Secondary Index)----叶子节点存放row identifier-------Inn ...

  9. 9.mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 max_connections ...

随机推荐

  1. Cookie中的httponly的属性和作用

    1.什么是HttpOnly? 如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安 ...

  2. 「java.util.concurrent并发包」之 ThreadPoolExecutor

    一 异步用new Thread? 大写的"low"!! new Thread(new Runnable() { @Override public void run() { // T ...

  3. DRF 认证 权限 视图 频率

    认证组件 使用:写一个认证类,继承BaseAuthentication 在类中写authenticate方法,把request对象传入 能从request对象中取出用户携带的token根据token判 ...

  4. 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法

    <深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...

  5. 05docker仓库---搭建本地仓库

    Docker仓库 仓库(Repository)是集中存放镜像的地方,分别公有仓库和私有仓库. 注册服务器是存放仓库的具体服务器.一个注册服务器上可以有多个仓库,每一个仓库里面可以有多个镜像. eg:仓 ...

  6. C#实现鼠标滚筒缩放界面的效果

    elementCanvas继承UserControl 声明属性: #region 缩放属性添加 float ratio = 1.0f; public float Ratio { set { ratio ...

  7. ubuntu 编译zbar 静态库

    wget http://downloads.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10.tar.gz tar -zvxf zbar-0.10.ta ...

  8. Hive SQL查询效率提升之Analyze方案的实施

    0.简介 Analyze,分析表(也称为计算统计信息)是一种内置的Hive操作,可以执行该操作来收集表上的元数据信息.这可以极大的改善表上的查询时间,因为它收集构成表中数据的行计数,文件计数和文件大小 ...

  9. 从零开始搭建react应用

    用create-react-app搭建react应用,了解npm run start的工作过程. 第一步:安装脚手架 create-react-app 1. 在node里 npm install cr ...

  10. 4.移动端自动化测试-API讲解

    一.前置代码 1.导入driver对象    from appium import webdriver 2.声明手机驱动对象  只有声明驱动对象我们才可以让手机完成脚本的操作    driver = ...