MySQL之性能优化

Posted 959xky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之性能优化相关的知识,希望对你有一定的参考价值。

  1. 查看执行计划explain

    1.1 Explain命令:它可以对select语句进行分析,并输出select执行的详细信息,以对开发人员针对性优化

    1.2 Explain的用法:select语句前面加上explain即可,例如:

 

 

  1.3explain参数说明

     expain出来的信息有10列,分别是idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra,下面对这些字段进行解释:

id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

select_type: SELECT 查询的类型.

table: 查询的是哪个表

partitions: 匹配的分区

type: join 类型

possible_keys: 此次查询中可能选用的索引

key: 此次查询中确切使用到的索引.

ref: 哪个字段或常数与 key 一起被使用

rows: 显示此查询一共扫描了多少行. 这个是一个估计值.

filtered: 表示此查询条件所过滤的数据的百分比

extra: 额外的信息

 

  1. 慢查询

2.1慢查询介绍

  mysql的慢查询日志功能,默认是关闭的,需要手动开启

     2.2开启慢查询功能

            查看是否开启慢查询功能

            

参数说明

slow_query_log    :是否开启慢查询日志,ON 为开启,OFF 为关闭,如果为关闭可以开启。

* log-slow-queries  :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

2.3临时开启慢查询功能

MySQL 执行 SQL 语句设置,但是如果重启 MySQL 的话将失效

set global slow_query_log = ON;

set global long_query_time = 1;

 

2.4永久开启慢查询功能

修改/etc/my.cnf配置文件,重启 MySQL, 这种永久生效.

[mysqld]

slow_query_log = ON

slow_query_log_file = /var/log/mysql/slow.log

long_query_time = 1

 

 

2.5慢日志格式

 

 

2.6格式说明:

第一行,SQL查询执行的时间

第二行,执行SQL查询的连接信息,用户和连接IP

第三行,记录了一些我们比较有用的信息,如下解析

    Query_time,这条SQL执行的时间,越长则越慢

    Lock_time,MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间

    Rows_sent,查询返回的行数

    Rows_examined,查询检查的行数,越长就当然越费时间

第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。

第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。

 

  1. MySQL性能分析语句show profile

     3.1介绍

        Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方

        语句使用:show profile  show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况.

                  show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使   用情况.显示的记录数由变量:profiling_history_size 控制,默认15条

     3.2show file性能展示

 

  1. MySQL性能优化细节

   4.1合理的创建及使用索引(考虑数据的增删情况)

   4.1.1合理的冗余字段(尽量建一些大一点的表,烤炉数据库的三大范式和业务设计的取舍)

   4.1.2使用sql要注意一些细节:select语句尽量不要用*where语句中尽量不要使用1=1in语句(建议使用exists)、注意组合索引的创建顺序组着查询条件、尽量查询力度大的SQL放到最左边、尽量建立组合索引

   4.1.3合理利用

 

     

以上是关于MySQL之性能优化的主要内容,如果未能解决你的问题,请参考以下文章

《高性能MySQL》之MySQL查询性能优化

MySQL 数据库性能优化之SQL优化

Mysql性能优化之参数配置(转)

论mysql5.7.13性能优化之索引优化

mysql性能优化之索引优化(转)

mysql性能优化之优化配置my.cnf文件