文档介绍:sql 优化
1. 优化 SQL 步骤
1. 通过 show status 和应用特点了解各种 SQL 的执行频率
通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获得。 SHOW
STATUS 可以根据需要显示 session 级别的统计结果和 global 级别的统计结果。
如显示当前 session: SHOW STATUS like "Com_%"; 全局级别:show global status;
以下几个参数对 Myisam 和 Innodb 存储引擎都计数:
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 慢查询的次数
2. 定位执行效率较低的 SQL 语句
可以通过以下两种方式定位执行效率较低的 SQL 语句:
1 / 14
1. 可以通过慢查询日志定位那些执行效率较低的 sql 语句,用 --log-slow-queries[=file_name] 选项启动时,
mysqld 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件。可以链接到管理维护中的相关章节。
2. 使用 show processlist 查看当前 MYSQL 的线程, 命令慢查询日志在查询结束以后才纪录,所以在应用反映执行效
率出现问题的时候查 询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,
包括线程的状态,是否锁表等等,可以实时的查看 SQL 执行情况, 同时对一些锁表操作进行优化。
3. 通过 EXPLAIN 分析低效 SQL 的执行计划: