Mysql(10)mysql 慢查询及sql优化
2018-01-30 20:49
344 查看
SQL优化
优化sql步骤:
有关慢查询的操作
-- 查看有关mysql数据库服务器的一些信息
show [session|global] status;
session:当前连接
global:数据库服务器启动之后
show global status;
show status like 'Com_%' 一般查看以com开头的
// 根据执行的sql语句(次数)
Com_select:查询
Com_update:修改次数
Com_insert:插入次数
Com_delete:删除的次数
// 此处是影响的行数(比如查询一次显示20行,那么行数增加20行)
InnoDB_rows_read:执行select操作的次数
InnoDB_rows_updated:执行update的次数
InnoDB_rows_inserted:执行insert操作的次数
InnoDB_rows_deleted:执行delete操作的次数
connections:连接mysql的数量
Uptime:服务器已经工作的秒数
Slow_queries:慢查询的次数
-- // 查看“慢查询”的配置信息
show variables like "%slow%";
-- // 查看“慢查询”的时间定义
show variables like "long%";
-- //设置“慢查询”的时间定义
set long_query_time=0.2;
-- //开启慢日志
set global slow_query_log='ON';
mysql> show variables like '%slow%';
+---------------------------+--------------------------------------------+
| Variable_name | Value |
+---------------------------+--------------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/yc-virtual-machine-slow.log |
+---------------------------+--------------------------------------------+
mysql> show variables like "long%";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
定位执行效率较低的SQL语句
1. explain select * from table where id=1000;
2. desc select * from table where id=1000;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE(简单查询,不是多表查询和复杂查询) 可能的值:simple,primary,union,dependent union,union result
table: php114(表名)
type: ALL() 可能的值:system,const(最优化,使用了主键或者唯一健),eq_ref,ref.ref_or_null,index_merge
possible_keys: NULL 提示使用哪个索引会在该表中找到行
key: NULL() mysql使用的索引,简单且重要
key_len: NULL() mysql使用的索引长度
ref: NULL 显示使用哪个列或者常数与key一起从表中选择行
rows: 6 mysql执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
Extra: 包含mysql解决查询的详细信息
1 row in set (0.00 sec)
SQL语句优化
表结构优化
SQL语句优化 复杂查询简单化,简单查询少量化
索引的优化 适当添加索引,并使用索引,但是请注意索引过多导致的MySQL压力过大
优化sql步骤:
慢查询日志 找出执行慢的sql语句 进行具体语句优化或建立索引
有关慢查询的操作
-- 查看有关mysql数据库服务器的一些信息
show [session|global] status;
session:当前连接
global:数据库服务器启动之后
show global status;
show status like 'Com_%' 一般查看以com开头的
// 根据执行的sql语句(次数)
Com_select:查询
Com_update:修改次数
Com_insert:插入次数
Com_delete:删除的次数
// 此处是影响的行数(比如查询一次显示20行,那么行数增加20行)
InnoDB_rows_read:执行select操作的次数
InnoDB_rows_updated:执行update的次数
InnoDB_rows_inserted:执行insert操作的次数
InnoDB_rows_deleted:执行delete操作的次数
connections:连接mysql的数量
Uptime:服务器已经工作的秒数
Slow_queries:慢查询的次数
-- // 查看“慢查询”的配置信息
show variables like "%slow%";
-- // 查看“慢查询”的时间定义
show variables like "long%";
-- //设置“慢查询”的时间定义
set long_query_time=0.2;
-- //开启慢日志
set global slow_query_log='ON';
mysql> show variables like '%slow%';
+---------------------------+--------------------------------------------+
| Variable_name | Value |
+---------------------------+--------------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/yc-virtual-machine-slow.log |
+---------------------------+--------------------------------------------+
mysql> show variables like "long%";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
定位执行效率较低的SQL语句
1. explain select * from table where id=1000;
2. desc select * from table where id=1000;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE(简单查询,不是多表查询和复杂查询) 可能的值:simple,primary,union,dependent union,union result
table: php114(表名)
type: ALL() 可能的值:system,const(最优化,使用了主键或者唯一健),eq_ref,ref.ref_or_null,index_merge
possible_keys: NULL 提示使用哪个索引会在该表中找到行
key: NULL() mysql使用的索引,简单且重要
key_len: NULL() mysql使用的索引长度
ref: NULL 显示使用哪个列或者常数与key一起从表中选择行
rows: 6 mysql执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
Extra: 包含mysql解决查询的详细信息
1 row in set (0.00 sec)
SQL语句优化
表结构优化
SQL语句优化 复杂查询简单化,简单查询少量化
索引的优化 适当添加索引,并使用索引,但是请注意索引过多导致的MySQL压力过大
相关文章推荐
- MySQL中优化sql语句查询常用的30种方法
- MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍
- MySQL5.6 如何优化慢查询的SQL语句 -- SQL优化
- 浅谈MySQL中优化sql语句查询常用的30种方法
- Mysql怎么样避免全表扫描,sql查询优化
- MySql5.5 SQL优化 慢查询日志存储
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 提高MySQL千万级大数据SQL查询优化30条经验
- MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍
- MySQL 常用30种SQL查询语句优化方法
- 提高mysql千万级大数据SQL查询优化几条经验
- 30种mysql优化sql语句查询的方法
- 提高mysql千万级大数据SQL查询优化30条经验
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql千万级大数据SQL查询优化
- 30个mysql千万级大数据SQL查询优化技巧详解
- Mysql避免全表扫描sql查询优化 .
- 提高mysql千万级大数据SQL查询优化几条经验(1)
- MySQL5.6 如何优化慢查询的SQL语句 -- SQL优化
- MySQL中sql查询优化的30种方法