1、查看慢查询日志是否开启:show variables like ‘slow%’;
slow_launch_time:查询超过时间才记录,show_launch_time=2,表示查询超过2s才记录日志
slow_query_log:ON表示开启,OFF表示关闭
show_query_log_file:慢查询记录日志存放位置
2、开启慢查询日志:set global slow_query_log = ON;(需要root权限)
3、查询long_query_time 的值:show variables like ‘long%’;
4、设置慢查询时间:set global long_query_time = 1;(记录执行时间超过 1 秒的查询)
这部分是关于索引和写SQL语句时应当注意的一些琐碎建议和注意点。
当结果集只有一行数据时使用LIMIT 1
避免SELECT *,始终指定你需要的列。从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要操作的时间,还是在数据库服务器与WEB服务器是独立分开的情况下。你将会经历非常漫长的网络延迟,仅仅是因为数据不必要的在服务器之间传输。
使用连接(JOIN)来代替子查询(Sub-Queries)。连接(JOIN).. 之所以更有效率一些,是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
使用ENUM、CHAR 而不是VARCHAR,使用合理的字段属性长度
尽可能的使用NOT NULL
固定长度的表会更快
拆分大的DELETE 或INSERT 语句
查询的列越小越快
Where条件
在查询中,WHERE条件也是一个比较重要的因素,尽量少并且是合理的where条件是很重要的,尽量在多个条件的时候,把会提取尽量少数据量的条件放在前面,减少后一个where条件的查询时间。
有些where条件会导致索引无效:
where子句的查询条件里有!=,MySQL将无法使用索引。
where子句使用了Mysql函数的时候,索引将无效,比如:select * from tb where left(name, 4) = ‘xxx’
使用LIKE进行搜索匹配的时候,这样索引是有效的:select * from tbl1 where name like ‘xxx%’,而like ‘%xxx%’ 时索引无效