通过show status和应用特点了解各种SQL的执行效率

通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果。

以下几个参数对MyISAM和InnoDB存储引擎计数:

  • Com_select:执行SELECT操作的次数,一次查询只累加1;
  • Com_insert:执行INSERT操作的次数,对于批量插入的INSERT操作,只累加一次
  • Com_update:执行update操作的次数
  • Com_delete:执行delete操作的次数

以下几个参数是针对InnoDB存储引擎计数的,累加的算法也略有不同:

  • Innodb_rows_read:SELECT查询返回的函数
  • Innodb_rows_inserted:执行INSERT操作插入的行数
  • Innodb_rows_updated:执行UPDATE操作更新的行数
  • Innodb_rows_deleted:执行DELETE操作删除的行数

通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。

对于事务型的应用,通过Com_commit和Com_rollback可以了解事务的提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着编写存在问题。

此外,以下几个参数便于我们了解数据库的基本情况:

  • Connections:视图连接MySQL服务器的次数
  • Uptime:服务器工作时间
  • Slow_queries:慢查询的次数

定位执行效率较低的SQL语句

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

  • 通过慢查询日志定位那些执行效率低的SQL语句,用--log-slow-queries[=file_name] 选项启动时,mysqld写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,可以链接到管理维护中的相关章节。
  • 慢查询日志在结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时地查看SQL执行情况,同时对一些锁表操作进行优化。

通过EXPLAIN分析低效的SQL的执行计划

通过以上步骤查询到效率地的SQL后,可以通过explain或desc获取MySQL如何执行SELECT语句的信息,包括SELECT语句执行过程表如何连接和连接的次序。

explain可以知道什么时候必须为表加入索引得到一个使用索引来寻找记录的更快的SELECT:

说明:

  • select_type:select类型
  • table:输出结果集的表
  • type:表示表的连接类型。
    • 当表中仅有一行是type的值为system是最佳的连接类型;
    • 当select操作中使用索引戒心表连接时type的值为ref;
    • 当select的表连接没有使用索引时,经常会看到type的值为ALL,表示对该表进行了全表扫描,这时需要考虑通过创建索引来提高表连接的效率。
  • possible_keys:表示查询时,可以使用的索引列
  • key:表示使用的索引
  • key_len:索引长度
  • rows:扫描范围
  • Extra:执行情况获得说明和描述

确定问题,并采取响应的优化措施

经过以上步骤,基本可以确认问题出现的原因,可以根据情况采取相应的措施,进行优化提高执行的效率。

MySQL下优化SQL的一般步骤相关推荐

  1. mysql 如何优化sql语句,如何优化SQL?MySQL中超实用的SQL语句送给大家

    如何优化SQL?MySQL中超实用的SQL语句送给大家 如何优化SQL?MySQL中超实用的SQL语句送给大家 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据 ...

  2. mysql sql优化_MySQL优化SQL语句的步骤

    我们在执行一条SQL语句的时候,如果我们想要知道这条SQL语句查询了哪些表,有没有使用索引,获取数据的时候遍历了多少行数据,我们可以通过EXPLAIN命令来查看这些执行信息,这些执行信息统称为执行计划 ...

  3. MySQL下执行*.sql文件

    首要步骤(一般可省略): 开启mysql服务(默认是开机时就自动运行了): 控制面板-->管理工具-->服务,在里面找到名称为mysql的项,双击就可看它的服务状态是启动还是停止,把它设为 ...

  4. mysql derived优化,SQL优化:derived 派生表优化

    参考资料 派生表 优化器可以使用两种策略来处理派生表引用(这也适用于视图引用): 将派生表合并到外部查询中(5.7引入的优化策略 derived_merge): 将派生表物化为内部临时表,再用于外部查 ...

  5. MySQL中优化sql语句查询常用的30种方法

    为什么80%的码农都做不了架构师?>>>    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 whe ...

  6. MySQL下的SQL语句

    SQL语言包含四个部分: DDL(数据库定义语言):用于定义和管理数据对象,包括数据库.数据表等 如:create.drop.alter DML(数据库操作语言):用于操作数据库对象中所包含的数据 如 ...

  7. 浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

  8. 浅谈MySQL中优化sql语句查询常用的30种方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

  9. MySQL教程——3 中级篇(存储引擎、优化SQL步骤、索引的使用)

    Mysql高级-day02 1. Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & ...

最新文章

  1. Docker宣布企业版支持Windows Server 2019
  2. Linux——进程管理学习简单笔记
  3. 学习Spring Boot:(十三)配置 Shiro 权限认证
  4. Linux ext4文件系统下 extundelete 恢复 误删除的文件
  5. iTunes怎么下载
  6. 跨浏览器确定一个窗口的大小
  7. 网易考拉向欧洲市场投入220亿,能掀起多大波澜?
  8. 3 个主流 Java 微服务框架,各有特色
  9. 项目管理 - 变更控制流程
  10. 笔记本电脑硬盘不见了_笔记本检测不到硬盘怎么办_电脑突然检测不到硬盘的解决方法-系统城...
  11. halt、poweroff
  12. 硅谷中那些潜在的颠覆世界的力量
  13. 【PANDA教程】PANDA详细教程笔记
  14. 韦东山ARM第一期作业(三)内存控制器和SDRAM
  15. celery爬取58同城二手车数据及若干问题
  16. 洛谷 P1830 轰炸Ⅲ
  17. Web前端技术 Web学习资料 Web学习路线 Web入门宝典
  18. Ubtun16.04 配置baxter机器人
  19. 某音数据获取策略及实现(1)
  20. Git-Git里程碑

热门文章

  1. MySQL数据库中默认事务隔离级别是?
  2. AttributeError: h5py.h5.H5PYConfig‘ has no attribute ‘__reduce_cython__‘
  3. R语言sample.int有放回或者无放回采样随机整数实战
  4. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?
  5. python使用base64编码解码数据
  6. luci网页shell_openwrt luci web分析
  7. 统计简单学_正态分布
  8. .fa .fna和.fasta是同一种格式文件吗?
  9. 【统计学习方法】朴素贝叶斯对鸢尾花(iris)数据集进行训练预测
  10. 【建站系列教程】1、前言