博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql数据中SQL优化第一篇:了解表操作,定位执行效率低的SQL
阅读量:4186 次
发布时间:2019-05-26

本文共 2101 字,大约阅读时间需要 7 分钟。

在本次学习中,使用的案例表是MySQL的的案例库的Sakila,sakila的的下载地址是:http://downloads.mysql.com/docs/sakila-db.zip。

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------

第一步:在sql优化的第一步,我们应该了解该数据库表中各种SQL的执行频率。使用命令:show status

mysql> show status like 'Com_%';+---------------------------+-------+| Variable_name             | Value |+---------------------------+-------+| Com_admin_commands        | 0     || Com_assign_to_keycache    | 0     || Com_alter_db              | 0     || Com_alter_db_upgrade      | 0     || Com_alter_event           | 0     || Com_alter_function        | 0     || Com_alter_procedure       | 0     || Com_alter_server          | 0     || Com_alter_table           | 2     || Com_alter_tablespace      | 0     || Com_analyze               | 0     || Com_begin                 | 0     || Com_binlog                | 0     || Com_call_procedure        | 0     || Com_change_db             | 3     || Com_change_master         | 0     || Com_check                 | 0     || Com_checksum              | 0     || Com_commit                | 15    |.....

解释:Com_xxx表示每个XXX语句执行的次数,我们通常比较关心的是以下几个统计参数。

  • Com_select:执行SELECT操作次数,一次查询只累加1。
  • Com_insert:执行INSERT操作次数,对于批量插入的INSERT操作,只累加一次。
  • Com_update:执行UPDATE修改操作的次数。
  • Com_delete:执行删除操作删除的次数。

上面这些参数对所有的存储引擎表操作都会进行累计以下这几个参数只针对在InnoDB的存储引擎,累加的算法也略有不同:

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

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

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

以下几个参数便于用户了解数据库的基本情况,

  • Connections:试图连接MySQL服务器的次数
  • 运行时间:服务器工作时间
  • Slow_queries要花:慢查询的次数

第二步:定位执行效率较低的SQL语句

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

              用--log-slow-queries [= file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的sql语句文件。

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

以上是对数据库的SQL优化中,对数据库表中各种SQL的操作频率和低效率的SQL的定位。

转载地址:http://tdfoi.baihongyu.com/

你可能感兴趣的文章
JAVA编写HTTP代码并发布在网上
查看>>
JDBC连接数据库的原理和步骤
查看>>
开发微信公众平台的基本功能
查看>>
JSP内置对象的学习
查看>>
用java写文件输入输出流,实现复制粘贴的方法
查看>>
学习JSP的方法步骤(参考)
查看>>
JSP中常见TOMCAT错误代码原因
查看>>
MyEclipse中WEB项目加载mysql驱动方法
查看>>
常见编写JAVA报错总结
查看>>
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的区别
查看>>
UTF-8和GBK有什么区别
查看>>
增加MyEclipse分配内存的方法
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>
Linux命令之chmod详解
查看>>
【java小程序实战】小程序注销功能实现
查看>>
leetcode Unique Paths II
查看>>
几个大数据的问题
查看>>
CareerCup Pots of gold game:看谁拿的钱多
查看>>
CarreerCup Sort Height
查看>>