本文是如何优化MYSQL语句让网站提速系列的第二篇,sql语句的优化。主要是如何的显示慢查询、定位慢查询和explain分析sql语句。
一、定位慢查询。增、删、改所占10%,查询所占90%。
二、如何显示慢查询。
三、如何定位慢查询。
四、explain分析SQL语句。
如何显示慢查询
指令
描述
show status
关于数据库的状态
show status like 'com_insert'
显示执行多少次的插入
show status like 'com_update'
显示执行多少次的更新
show status like 'com_delete'
显示执行多少次的删除
show status like 'com_select'
显示执行多少次的查询
show status like 'uptime'
显示mysql服务启动多长时间,如果时间过长,表存储引擎是myisam,进行碎片整理
show status like 'slow_queries'
显示慢查询的个数
show variables like 'long_query_time'
显示慢查询的时间,默认10秒
set long_query_time=0.5
设置慢查询的时间
show [ seesion | global ] status like ... 默认是会话级别(session)。如果想从mysql启动开始的时候就记录,那么就是用global。
如何定位慢查询(开启慢查询日志)
一旦开启慢查询日志,慢查询日志文件的位置在mysql数据库的配置文件my.ini中设置。
datadir="F:/data/mysql/mysql-error.log"
此处是设置将来保存慢查询日志的文件位置。默认情况下,mysql不会记录慢查询日志。
第一步:如何开启慢查询服务
1、先停止mysql服务。
已配置环境变量
net stop mysql
mysql.exe 客户端服务
mysqld.exe 服务器服务
2、通过安全模式启动,就会记录慢查询语句。
未配置环境变量
路径\mysql\bin
路径\mysql\bin>mysqld --safe-mode --slow-query-log
安全模式启动 开启慢查询日志
注意:在安全模式下开启,在系统的服务中查看mysql是不显示正在运行的。
以上操作是针对于mysql5.5版本。
如果是低版本:
mysqld -log-slow-queries="d:/mylog.log";
3、关闭安全模式启动mysql。
4、set long_query_time=0.5。
5、select * from table。
6、到慢查询日志中的查找对应的SQL语句。
explain分析SQL语句
1、如果用主键去查询,自动会使用主键索引。
2、如果创建的是复合索引,只有左边可以用,右边不能用。
3、模糊查询时,%或者_写在左边没有索引,写在右边会用到索引。
4、在条件的语句中使用or,那么or两边的字段都必须要有索引,有一个没有,索引将无法使用。
5、如果一个字段是字符型,必须要加引号。
例如:
explain select * from destoon_info_22 where title='脉动式灭菌器';
+----+-------------+-----------------+------+---------------+-------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+-------+---------+-------+------+-------------+
| 1 | SIMPLE | destoon_info_22 | ref | title | title | 303 | const | 1 | Using where |
+----+-------------+-----------------+------+---------------+-------+---------+-------+------+-------------+
possible_keys 和 key 就是索引的名称。