一.优化SQL语句的一般步骤

1.通过 show status命令了解各种sql的执行频率

mysql客户端连接成功后,通过show[session|global] status命令,可以查看服务器的状态,如果不加默认为session(session级为当前连接的统计结果,global级为自数据库上次启动到现在的统计结果)

show status like 'Com_%';

Com_insert:执行select操作的次数,一次查询只累加1

Com_select:执行insert操作的次数,批量插入的insert操作只累加一次

Com_delete:执行update操作次数

Com_update:提交和回滚均会累加执行delete操作次数

针对innodb存储引擎的表操作,累加的算法比如

show status like 'Innodb_rows_%;

Innodb_rows_deleted :执行delete操作删除的行数

Innodb_rows_inserted:执行insert操作插入的行数

Innodb_rows_read :select查询返回的函数

Innodb_rows_updated: update操作更新的函数

可以了解到当期数据库是以插入和查询为主

对于事务型的应用,通过com_commit 和com_rollback可以了解事务提交和回滚的情况,对于回滚特别频繁的操作,可能意味着代码编写有问题

show status like ‘connections’; 试图连接mysql数据库的次数

show status like ‘uptime’; 服务器工作时间

show status like ‘slow_queries’; 慢查询的次数

2.定位执行效率较低的sql语句

可以通过以下两种方式定位执行效率较低的SQL语句

一. 通过慢查询日志定位那些执行效率较低的SQL语句

1. 查询慢查询日志的开启状态和慢查询日志储存的位置

show variables like '%query%';

slow_query_log : 是否已经开启慢查询

slow_query_log_file : 慢查询日志文件路径

long_query_time :  超过多少秒的查询就写入日志

log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)

默认情况下,MySQL数据库没有开启慢查询日志(off),需要我们手动来设置这个参数。

当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件

2. 临时开启慢查询日志,只对当前数据库有效

set global slow_query_log = on;

3.临时设置慢查询时间临界点  查询时间高于这个临界点的都会被记录到慢查询日志中

set long_query_time = 0;

4. 重启MySQL后生效

5. 在配置慢查询之前,已经导入了示例的数据文件。mysql官方数据示例,接下来就开始查询

6. 查看以上的命令操作 sudo cat -n /usr/local/mysql/data/xupengjundeMacBook-Pro-slow.log

Time
该日志记录的时间
User @Host
MySQL登录的用户和登录的主机地址
Query_time
第一个时间是查询的时间、第二个是锁表的时间、第三个是返回的行数、第四个是扫描的行数
SET timestamp
这一个是MySQL查询的时间
sql
这一行就很明显了,表示的是我们执行的sql语句

7.总结

由于我们配置long_query_time=0,因此所有的sql语句都将被记录下来,这里我们假设,仅仅是假设。我们设置的long_query_time=5,然而上面的第三项中Query_time大于5,如果是实际项目中不属于正常范围,则需要对其进行优化,当然优化的方式有很多种,下面我们使用简单的索引方式进行优化一下

二.慢查询日志在查询结束以后才记录,所以在应用反应执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等,可以实时查看SQL的执行情况,同时对一些锁表操作进行优化.

3.通过explain分析低效sql的执行计划

通过以上步骤查询到效率低的SQL语句后,可以通过explain或者desc命令获取MySQL如何执行select语句的信息,包括select语句执行过程中表如何连接和连接的顺序

4.通过 show profile 分析sql

5.通过trace分析 优化器 如何选择执行计划

6.确定问题并采取相应的优化措施

MySQL优化篇(未完待续)的更多相关文章

  1. MySQL开发篇(未完待续)

    一.索引 什么是索引? 索引是帮助Mysql提高获取数据的数据结构,换一句话讲就是"排好序的快速查找的数据结构". 1.索引的分类 MySQL主要的几种索引类型:1.普通索引.2. ...

  2. VINS(九)Ceres Solver优化(未完待续)

    使用Ceres Solver库处理后端优化问题,首先系统的优化函数为

  3. [dart学习]第四篇:函数和操作符(本篇未完待续)

    接着学习dart的函数和操作符. 1.函数Function dart是一种真正的面向对象的语言,通常一个函数也是Function类型的对象,这也就是说可以把函数赋值给一个变量,或者作为另一个函数的入参 ...

  4. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

  5. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  6. 命令行操作mysql 未完待续......

    复制数据表 create table 新表 like 旧表: 删除表中某个字段 alter table 表名 drop column 字段; 例子: alter table news_apply_lo ...

  7. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  8. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  9. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

随机推荐

  1. 利用数据库拿shell的一些姿势

    0x01.利用MySQL命令导出getshell 利用条件: 1.拥有网站的写入权限 2.Secure_file_priv参数为空或者为指定路径 3.知道网站的绝对路径 方法: 通过into outf ...

  2. react-native 常见问题

    1.webpack使用babel-loader后编译报错 报错ERROR in ./entry.js Module build failed: SyntaxError: /Users/yixin/De ...

  3. win10系统安装robotframework环境时,不能成功安装autoItLibrary报错的问题解决

    安装了autoit-v3-setup.exe,把autoItLibrary导入ride.py后仍然置红,开始DOS环境下手动安装autoLibrary,执行命令后如下报错:Running setup. ...

  4. 【转】Setting up SDL 2 on MinGW

    FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/mingw/index.php Setting up SDL 2 on MinG ...

  5. Java学习的第五十六天

    1.例11.5引用保护成员 public class Cjava { public static void main(String[]args) { Student1 s1=new Student1( ...

  6. AC 自动机刷题记录

    目录 简介 第一题 第二题 第三题 第四题 第五题 第六题 简介 这就是用来记录我对于<信息学奥赛一本通 · 提高篇>一书中的习题的刷题记录以及学习笔记. 一般分专题来写(全部写一起可能要 ...

  7. POJ2430 Lazy Cows

    题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...

  8. 使用 C# 9.0 新语法提升 if 语句美感

    C# 语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁.本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例. 使用属性模式代替 IsNullOrEmpty ...

  9. spring cloud feign 添加headers

    原文地址: https://www.jianshu.com/p/dfec934b737f 很多时候我们需要feign的时候添加headers 1.把当前登录用户的token传到下一个服务 2.在自己的 ...

  10. ubuntu 18.04 安装anaconda

    ubuntu 安装anaconda 4版本 为了学习 tensorflow python3.5 版本 使用anaconda 安装: https://mirrors.tuna.tsinghua.edu. ...