MySQL性能优化实战开课吧广场

对于许多Java从业者来说,MySQL的性能优化一直是大难题。无论是跳槽面试,还是日常的业务开发,你总会遇到这样那样的数据库性能瓶颈。这时候除了常见的分库分表外,还有哪些方式可以优雅的帮助我们进行数据库的性能优化呢。

MySQL性能优化实战-开课吧广场

6月1日的《HelloWorld公开课》,开课吧Java进阶课教学教研负责人,灭霸詹手把手教你如何进行MySQL的性能优化,让你不再为数据库性能瓶颈发愁。

MySQL性能优化思路

相信每个从事Java开发的工程师都能或多或少的说出几条数据库的优化方法,下面我们列举了集中常见的优化思路,相信其中一点有你熟悉的方法。

首先需要使用功能,去获取所有查询时间比较长的SQL语句

查看执行计划,查看有问题的SQL的执行计划

针对查询慢的SQL语句进行优化

使用查看有问题的SQL的性能使用情况

调整操作系统参数优化

升级服务器硬件

慢查询日志

在日常开发中,我们经常遇到的一个问题是,虽然知道是MySQL性能瓶颈遇到了问题,但如何才能定位到具体是由于哪些原因导致的呢?幸好MySQL提供了慢查询日志。这个日志会记录所有执行时间超过long_query_time(默认是10s)的SQL及相关的信息。

我们可以通过下面代码临时开启或永久开启慢查询功能,slow_query_log意思是慢查询日志是否开启,slow_query_log_file指明了日志所在的位置。

//临时开启慢查询功能

setglobalslow_query_log=ON;

setgloballong_query_time=1;

//永久开启慢查询功能

slow_query_log=ON

long_query_time=1

查看执行计划

开启了慢查询后,我就可以查看SQL的执行计划了,看看到底是哪里出现了问题,通过EXPLAIN命令,会输出如下结果。

mysqlexplainselect*fromtuserwhereid=2\G

***************************1.row

***************************

id:1

select_type:SIMPLE

table:tuser

partitions:NULL

type:const

possible_keys:PRIMARY

key:PRIMARY

key_len:4

ref:const

rows:1

filtered:.00

Extra:NULL

1rowinset,1warning(0.01sec)

有同学看到上面输出的命令行有点蒙,这些都是什么意思啊,不要着急,我们一个一个命令来看

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

select_type:SELECT查询的类型table:查询的是哪个表

partitions:匹配的分区

type:join类型

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

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

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

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

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

extra:额外的信息




转载请注明:http://www.aierlanlan.com/grrz/3076.html