优化 SQL 的一般步骤

一、通过  show status/ysqladmin extended-status  和应用特点了解各种  SQL的执行频率
1. Com_select 执行 select 操作的次数,一次查询只累加 1;
2. Com_insert 执行 insert 操作的次数,对于批量插入的 insert 操作,只累加一次 ;
3. Com_update 执行 update 操作的次数;
4. Com_delete 执行 delete 操作的次数;
以下几个参数是针对 Innodb 存储引擎计数的,累加的算法也略有不同:
1. Innodb_rows_read select 查询返回的行数;
2. Innodb_rows_inserted执行 Insert 操作插入的行数;
3. Innodb_rows_updated 执行 update 操作更新的行数;
4. Innodb_rows_deleted 执行 delete 操作删除的行数;
通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是
以查询操作为主,以及各种类型的 SQL 大致的执行比例是多少。对于更新操作的计 数 ,
是对执行次数的计数,不论提交还是回滚都会累加。
对于事务型的应用,通过 Com_commit 和 Com_rollback 可以了解事务提交和回滚
的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。
此外,以下几个参数便于我们了解数据库的基本情况:
1. Connections 试图连接 Mysql 服务器的次数
2. Uptime 服务器工作时间
3. Slow_queries 慢查询的次数

二、定位执行效率较低的SQL 
可以通过以下两种方式定位执行效率较低的 SQL 语句:
1. 可以通过慢查询日志定位那些执行效率较低的 sql 语句,用--log-slow-
queries[=file_name]选项启动时,mysqld 写一个包含所有执行时间超过
long_query_time 秒的 SQL 语句的日志文件。
2. 慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询
慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在
进行的线程,包括线程的状态,是否锁表等等,可以实时的查看 SQL 执行情况,同
时对一些锁表操作进行优化。

三、通过  EXPLAIN  分析低效  SQL  的执行计划
我们可以通过 explain 或者 desc 获取
MySQL 如何执行 SELECT 语句的信息,包括 select 语句执行过程表如何连接和连接的
次序。
explain 可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录
的更快的 SELECT。
mysql> explain select sum(moneys) from sales a,companys b where a.company_id =

b.id and a.year = 2006;

四、确定问题,并采取相应的优化措施
经过以上步骤,基本可以确认问题出现的原因,可以根据情况采取相应的措施,
进行优化提高执行的效率
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值