mysql优化
查询sql版本
mysql> select @@version;
是否开启慢查询
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.00 sec)
查询完整的日志信息
mysql> show variables like '%log%';
记录未使用索引的sql
mysql> set global log_queries_not_using_indexes = on;
显示慢查询的时间
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
设置超过多少秒记录慢查询日志
mysql> set global long_query_time=1;
开启慢查询日志
mysql> set global slow_query_log=on;
MySQL, Version: 5.6.13 (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time Id Command Argument
执行的时间
# Time: 161128 21:11:25
执行的主机名
**#**User@Host: root[root] @ localhost [::1] Id: 13
执行的信息
# Query_time: 0.001000 Lock_time: 0.000000 Rows_sent: 2 Rows_examined: 2
use sakila;
时间戳
SET timestamp=1480338685;
执行sql的内容
select * from store;
mysqldumpslow + 日志地址
[root@bogon software]# wget percona.com/get/pt-query-digest
[root@bogon software]#cp pt-query-digest /sbin
[root@bogon sbin]#chmod 777 pt-query-digest
[root@bogon sbin]yum install perl*
pt-query-digest
explain +查询语句
table:显示查询的表名
type:重要列,显示连接了何种类型const(主键查找) 、eq_reg(范围查找)、ref(连接查询)、range(索引的范围查找)、index(索引扫描)、all(表扫描)
possible_keys:可能应用在表中的索引,如果为null表示没有索引
key:实际应用的索引,如果为null表示没有使用索引
key_len:索引长度,越短越好
ref:显示索引的那一列被使用
rows:请求数据的行数
extra:列需要注意的返回值
Using filesort:查询需要优化,需要额外的步骤来实现如何对返回的行排序
Using temporary:查询需要优化,创建了一个临时表来存储结果,对不同的列进行ORDER BY 而非GROUP BY
索引优化规则
max()通过添加索引优化
count() *包含null而列不包含null
子查询优化为join如果存在一对多需要去重
列的离散值更大,联合索引时就应该放在最前面