设为首页 - 加入收藏
广告 1000x90
您的当前位置:主页 > 网站运营 > 正文

网站优化查询

来源:引流技巧 编辑:引流技巧 时间:2026-02-11

你一定知道,一个快速访问的网站可以让用户喜欢,可以帮助网站从Google上提高排名,可以帮助网站提高转化率。如果你看过关于网站性能优化的文章,比如设置服务器的最佳实现,杀教慢速代码,用CDN加载图片,你会觉得你的WordPress网站足够快。但是真的是这样吗?使用动态数据库驱动的网站,比如WordPress,你的网站可能还有一个问题需要解决:数据库查询延迟了网站的访问速度。在这篇文章中,我将介绍如何识别导致性能问题的查询,如何找出它们的问题,以及如何快速修复这些问题和其他加快查询速度的方法。我将以门户网站deliciousbrains.com的慢速查询速度为实例。定位。处理慢SQL查询的第一步是找到慢查询。Ashley已经在之前的博客中赞扬了调试插件QueryMonitor,这个插件的数据库查询特性使得它成为定位慢SQL查询的宝贵工具。该插件将在所有页面请求过程中报告数据库请求,并通过调用这些查询代码或原始(插件、主题、WordPress核)过滤查询、高亮度重复查询和慢速查询。如果您不愿意在生产安全环境中安装调试插件(性能成本原因),您也可以打开MySQLSlowQueryLog,以便记录在特定时间内执行的所有查询。该方法配置和设置存储查询位置相对简单。因为这是一种服务级调整,性能影响会小于使用调试插件,但也应该在不使用时关闭。理解。一旦你找到了一个你要花很多钱找的查询,那就试着去了解它,找出是什么让查询变慢了。最近,当我们开发我们的网站时,我们找到了一个8秒钟的查询。我们使用WooCommerce和定制版的WooCommerce软件插件来运行我们的插件商店。这个查询的目的是为了获得我们知道客户号的所有订阅。WooCommerce是一个稍微复杂的数据模型。即使订单以定制类型存储,用户的标识(商店为每个用户创建的WordPress)也不存储在post_author中,而是作为后期数据的一部分。订阅软件插件为定制表创建了一对链接。让我们深入了解更多关于查询的信息。MySQL是你的朋友。MySQL有一个非常方便的语句DESCRIBE,的信息,如字段名称、数据类型等。因此,当您执行DESCRIBEwp_postmeta时,您将看到以下结果:你可能已经知道这句话了。但是你知道DESCRIBE句子可以用在SELECT、INSERT、UPDATE、REPLACE、DELETE句子前面吗?更为人所知的是,他的同义词EXPLAIN将提供关于句子如何执行的详细信息。这是我们查询的结果:乍一看,这很难解释。幸运的是,人们总结了理解句子的综合指南。最重要的字段是type,它描述了一个手表是如何构成的。如果你想看所有的内容,这意味着MySQL应该从内存中读取整个手表,增加I/O的速度,并在CPU上加载。这叫全表浏览——以后会详细介绍。rows字段也是一个很好的logo,logoMySQL要做的事情,显示了结果中找到了多少行。Explain还给了我们很多优化信息。比如pm2表(wp_postmeta)告诉我们是Usingfilesort,因为我们用ORDERBY句子对结果进行了排序。如果要分组查询结果,会增加执行费用。可视化研究。对于这类研究,MySQLWorkbench是另一个方便免费的工具。用MySQL5.6及以上版本打开数据库,EXPLAIN的结果可以以JSON格式输出,MySQLWorkbench将JSON转换为可视化执行句:它自动用颜色提醒用户注意查询的问题。我们可以立即看到连接wp_woocommerce_software_licences(别名l)的手表存在严重问题。解决方案。你应该避免浏览所有表格的查询,因为他使用非索引字段order_id连接wp_woocommerce_software_licences表格和wp_posts表格。这是查询慢的常见问题,也是相对容易解决的问题。索引。order_id是表中非常重要的象征性数据,如果想用这种方式进行查询,除了需要在列上制作索引外,MySQL还需要逐字扫描表的所有行为,直到找到想要的行为。添加索引,看看它是如何工作的CREATEINDEXorder_idONwp_woocommerce_software_licences(order_id)哇,干得好!我们成功地添加了索引,并将查询时间缩短了5秒。理解您的查询语句。查看查询句子-查看每个join和每个子查询。他们做了他们不应该做的事情吗?这里有什么优化吗?在这个例子中,我们通过order_id将licenses表和posts表连接起来,同时将postype限制为shop_order。这样可以保证我们只使用正确的订单记录,但实际上这在查询中是多余的。众所周知,这是一个关于安全的赌注,在posts表中,softwarelicense行是通过order_id与WooComerceorder相关联的,这在PHP插件代码中是强制的。让我们删除join,看看是否有任何改进:提升不是很大,但是现在查询时间不到3秒。缓存所有数据。如果您的服务器默认情况下没有使用MySQL查询缓存,则应打开缓存。打开缓存意味着MySQL将保存所有句子和句子执行的结果。如果有与缓存中完全相同的句子需要执行,MySQL将返回缓存结果。缓存不会过时,因为MySQL会在表格数据更新后刷新缓存。查询监视器发现,当我们加载一个页面时,我们的查询句已经执行了四次。虽然MySQL查询缓存很好,但是在一个请求中重复读取数据库的数据应该是完全避免的。您的PHP代码中的静态缓存非常简单,可以高效地解决这个问题。基本上,第一次请求时,从数据库中获取查询结果,并将其存储在类别的静态属性中,然后随后的查询句调用将从静态属性中返回结果:

相关推荐:

栏目分类

微商引流技巧网 www.yinliujiqiao.com 联系QQ:1716014443 邮箱:1716014443@qq.com

Copyright © 2019-2024 强大传媒 吉ICP备19000289号-9 网站地图 rss地图

Top