必备SQL查询优化技巧提升网站访问速度

  

在这篇文章中,我将介绍如何识别导致性能出现问题的查询,如何找出它们的问题所在,以及快速修复这些问题和其他加快查询速度的方法。

  

必备SQL查询优化技巧提升网站访问速度

  

你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从谷歌上提高排名,可以帮助网站增加转化率。如果你看过网站性能优化方面的文章,例如设置服务器的最佳实现,到干掉慢速代码以及使用CDN加载图片,就认为你的WordPress网站已经足够快了。但是事实果真如此吗?

  

使用动态数据库驱动的网站,例如WordPress,你的网站可能依然有一个问题亟待解决:数据库查询拖慢了网站访问速度。

  

在这篇文章中,我将介绍如何识别导致性能出现问题的查询,如何找出它们的问题所在,以及快速修复这些问题和其他加快查询速度的方法。我会把门户网站deliciousbrains.com出现的拖慢查询速度的情况作为实际的案例。

  

  

处理慢SQL查询的第一步是找到慢查询.Ashley已经在之前的博客里面赞扬了调试插件查询监控,而且这个插件的数据库查询特性使其成为定位慢SQL查询的宝贵工具。

  

该插件会报告所有页面请求过程中的数据库请求,并且可以通过调用这些查询代码或者原件(插件,主题,WordPress核)过滤这些查询,高亮重复查询和慢查询。

  

必备SQL查询优化技巧提升网站访问速度

  

要是不愿意在生产安环境装调试插件(性能开销原因),也可以打开MySQL慢查询日志,这样在特定时间执行的所有查询都会被记录下来。这种方法配置和设置存放查询位置相对简单。

  

由于这是一个服务级别的调整,性能影响会小于使用调试插件,但当不用的时候也应该关闭。

  

  

一旦你找到了一个你要花很大代价找到的查询,那么接下来就是尝试去理解它并找到是什么让查询变慢。最近,在我们开发我们网站的时候,我们找到了一个要执行8秒的查询。

  

我们使用WooCommerce和定制版的WooCommerce软件插件来运行我们的插件商店。此查询的目的是获取那些我们知道客户号的客户的所有订阅。

  

WooCommerce是一个稍微复杂的数据模型,即使订单以自定义的类型存储、用户的ID(商店为每一个用户创建的WordPress)也没有存储在post_author,而是作为后期数据的一部分。订阅软件插件给自义定表创建了一对链接。让我们深入了解查询的更多信息。

  

  

MySQL有一个很方便的语句描述,它可以输出表结构的信息,比如字段名、数据类型等等,所以,当你执行描述wp_postmeta;你将会看到如下的结果:

  

必备SQL查询优化技巧提升网站访问速度

  

你可能已经知道了这个语句。但是你知道描述语句可以放在选择、插入、更新、替换和删除语句前边使用吗?更为人们所熟知的是他的同义词解释,并将提供有关该语句如何执行的详细信息。

  

这是我们查询到的结果:

  

必备SQL查询优化技巧提升网站访问速度

  

乍一看,这很难解释。幸运的是,人们通过SitePoint总结了一个理解语句的全面指南。

  

最重要的字段是类型,它描述了一张表是怎么构成的。

  

如果你想看全部的内容,那就意味着MySQL要从内存读取整张表,增加I/O的速度并在CPU上加载。这种被称为“全表浏览”——稍后将对此进行详细介绍。

  

行字段也是一个好的标识,标识着MySQL将要不得不做的事情,它显示了结果中查找了多少行。

  

解释也给了我们很多可以优化的信息,例如,pm2表((wp_postmeta),告诉我们是使用filesort,因为我们使用了命令语句对结果进行了排序。如果我们要对查询结果进行分组,这将会给执行增加开销。

  

  

对于这种类型的研究,MySQL工作台是另外一个方便,免费的工具。将数据库用MySQL5.6及其以上的版本打开,解释的结果可以用JSON格式输出,同时MySQL工作台将JSON转换成可视化执行语句:

  

必备SQL查询优化技巧提升网站访问速度

必备SQL查询优化技巧提升网站访问速度