SQL 优化
优化 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 压力过大
来源: http://blog.csdn.net/wizblack/article/details/79210520