MySQL优化思路

1、慢查询 (用日志记录出现出问题的sql)
2、Explain (显示sql使用索引,表连接情况,尅呀帮助选择更好的索引和写出更优化的查询语句)
3、Profile(查询SQL会执行多少时间, 并看出block io,CPU,Memory,swaps,context switches,source使用量, 执行过程中 Systemlock, Table lock 花多少时间等等)

慢查询

 开启


Linux:

在mysql配置文件my.cnf中增加

log-slow-queries=/var/lib/mysql/slowquery.log (日志文件位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes = on (记录没有使用索引的query,可以根据情况决定是否开启)

Windows:

在my.ini的[mysqld]添加如下语句:

log-slow-queries =E:\mysql\log\mysqlslowquery.log
long_query_time = 2

 查看

使用mysqldumpslow查看
mysqldumpslow -s c -t 10 host-slow.log -- 访问次数最多的20个sql语句
mysqldumpslow -s r -t 10 host-slow.log -- 返回记录集最多的20个sql
mysqldumpslow -t 10 -s t -g "left join" host-slow.log -- 按照时间返回前10条里面含有左连接的sql语句

explain

看看官网解释:
Name: 'EXPLAIN'
Description:
Syntax:
{EXPLAIN | DESCRIBE | DESC}
    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {
    EXTENDED
  | PARTITIONS
  | FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
}

explainable_stmt: {
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

The DESCRIBE and EXPLAIN statements are synonyms. In practice, the
DESCRIBE keyword is more often used to obtain information about table
structure, whereas EXPLAIN is used to obtain a query execution plan
(that is, an explanation of how MySQL would execute a query). The
following discussion uses the DESCRIBE and EXPLAIN keywords in
accordance with those uses, but the MySQL parser treats them as
completely synonymous.

查看执行情况直接explain 语句即可

profiling

直接上实例

mysql> select @@PROFILING;
+-------------+
| @@PROFILING |
+-------------+
|           0 |
+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> set profiling;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> set profiling = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> show profile ;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000056 |
| checking permissions | 0.000023 |
| Opening tables       | 0.000020 |
| init                 | 0.000026 |
| optimizing           | 0.000021 |
| executing            | 0.000026 |
| end                  | 0.000019 |
| query end            | 0.000020 |
| closing tables       | 0.000019 |
| freeing items        | 0.000032 |
| cleaning up          | 0.000030 |
+----------------------+----------+
11 rows in set, 1 warning (0.00 sec)

mysql> show profiles ;
+----------+------------+----------+
| Query_ID | Duration   | Query    |
+----------+------------+----------+
|        1 | 0.00029200 | select 1 |
+----------+------------+----------+
1 row in set, 1 warning (0.00 sec)

mysql> select 2;
+---+
| 2 |
+---+
| 2 |
+---+
1 row in set (0.00 sec)

mysql> show profiles ;
+----------+------------+----------+
| Query_ID | Duration   | Query    |
+----------+------------+----------+
|        1 | 0.00029200 | select 1 |
|        2 | 0.00032100 | select 2 |
+----------+------------+----------+
2 rows in set, 1 warning (0.00 sec)

mysql> show profile for query 2;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000077 |
| checking permissions | 0.000023 |
| Opening tables       | 0.000022 |
| init                 | 0.000028 |
| optimizing           | 0.000022 |
| executing            | 0.000027 |
| end                  | 0.000019 |
| query end            | 0.000021 |
| closing tables       | 0.000019 |
| freeing items        | 0.000033 |
| cleaning up          | 0.000030 |
+----------------------+----------+
11 rows in set, 1 warning (0.00 sec)

mysql> show profile block io,CPU,Memory for query 2;
+----------------------+----------+----------+------------+--------------+---------------+
| Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting             | 0.000077 | 0.000000 |   0.000000 |            0 |             0 |
| checking permissions | 0.000023 | 0.000000 |   0.000000 |            0 |             0 |
| Opening tables       | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
| init                 | 0.000028 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing           | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
| executing            | 0.000027 | 0.000000 |   0.000000 |            0 |             0 |
| end                  | 0.000019 | 0.000000 |   0.000000 |            0 |             0 |
| query end            | 0.000021 | 0.000000 |   0.000000 |            0 |             0 |
| closing tables       | 0.000019 | 0.000000 |   0.000000 |            0 |             0 |
| freeing items        | 0.000033 | 0.000000 |   0.000000 |            0 |             0 |
| cleaning up          | 0.000030 | 0.000000 |   0.000000 |            0 |             0 |
+----------------------+----------+----------+------------+--------------+---------------+
11 rows in set, 1 warning (0.00 sec)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值