本文是如何优化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 就是索引的名称。