Mysql优化

Mysql优化

详情请查看https://www.cnblogs.com/clsn/p/8214048.html

1、为什么要对数据库进行优化?

  1.1、避免出现页面访问错误

  •  由于数据库连接timeout产生页面5xx的错误
  • 由于慢查询造成页面无法加载
  • 由于阻塞造成数据无法提交

  1.2、增加数据库的稳定性  

  • 很多数据库问题都是由于低效的查询引起的

  1.3、优化用户的体验

  • 流畅页面的访问速度
  • 良好的网站功能体验

2、数据库的优化可以从以下几个方面

  2.1、sql以及索引

  2.2、数据库表结构

  2.3、系统配置

  2.4、硬件

3、sql以及索引的优化

  3.1、慢查询日志的常用sql

  是否开启慢查询日志,有两个值off/on。

show VARIABLES like 'slow_query_log'

  设置是否开启慢查询。

set global slow_query_log = on

  

  查看日志文件的状态

show VARIABLES like '%log%'

   

  设置开启未使用索引的查询

set GLOBAL log_queries_not_using_indexes=on

   

  查看慢查询的设置时间,默认为10秒;设置慢查询的时间为1s

show VARIABLES like 'long_query_time'
set long_query_time = 1

  3.2、慢查询日志的存储格式

执行该sql的时间
# Time: 2018-09-17T07:18:02.492417Z

执行该条sql的主机信息
# User@Host: root[root] @ localhost [127.0.0.1]  Id:    26

该条sql的执行信息
# Query_time: 0.002000  Lock_time: 0.000000 Rows_sent: 356  Rows_examined: 712

该条sql的执行时间
SET timestamp=1537168682;

该条sql的内容
select * from t_user LIMIT 6;

   

  3.3、使用explain来执行SQL的执行计划

expalain返回各列的含义:

table:显示这一行的数据是关于哪张表的

type:这是最重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和All。

possible_keys:显示可能应用在这张表中的索引。如果为NULL,没有可能的索引。

key:实际使用的索引。如果为NULL,没有使用索引。

key_len:使用的索引的长度,在不损失精度的情况下,长度越短越好。

ref:显示索引的那一列被使用了,如果可能的话是一个常数。

rows:MYSQL认为必须检查的用来返回请求数据的行数。

Extra:Extra列需要注意的返回值。

  Using filesort:看到这个的时候查询就需要优化了,

  Using temporary:看到这个的时候查询就需要优化了。MYSQL需要创建一个临时表来存储结果,这通常发生在不同的列集进行ORDER BY上,而不是GROUP BY上。

原文地址:https://www.cnblogs.com/xiaocao123/p/9663266.html