GG资源网

WordPress网站优化之MySQL优化

建立了一个博客,发表了3.8万篇文章。

随着数据条数的增多,尤其是搜索的时候,发现搜索时灵时不灵,很久都没有反应。

后面在wordpress中footer.php页面下加入这一句,可以显示mysql加载的速度和耗时。

<?php echo get_num_queries();?>次加载共计耗时<?php timer_stop(1);?>秒
搜索关键词之后,发现用时居然快一分钟了,实在是不能忍了。

18次加载共计耗时52.783秒
————————————————

限定搜索标题
搜索发现关键词发现返回一两万条结果。

才了解到搜索不仅仅是搜索标题,还包括正文内容。

其实我在这里并不需要搜索正文内容,修改PHP代码,限定只搜索标题,将下面的代码添加到主题的 functions.php 文件即可

/**
* 让 WordPress 只搜索文章的标题
* https://www.wpdaxue.com/search-by-title-only.html
*/
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;

if ( empty( $search ) )
return $search; // skip processing - no search term in query

$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';

$search =
$searchand = '';

foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}

if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}

return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
对MySQL的wp_posts表中post_title增加索引
这样加快对标题搜索。

安装Memcached插件
在bt面板里勾选这个插件,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

清理WordPress中MySQL数据库垃圾数据
数据库的垃圾数据主要存在wp_posts、 wp_postmeta、 wp_commetns、 wp_commentmeta 和 wp_options

具体可以搜索”介绍使用WordPress时10个常用的MySQL查询“等内容。

关于Wordpress中数据表关系如下

数据表 存储的数据 关联到
wp_posts 文章、页面、附件、版本、导航菜单项目 wp_postmeta (通过post_id关联)
wp_postmeta 每个文章的元数据 wp_posts (通过 post_id关联)
wp_term_relationships 文章和自定义分类法之间的关系 wp_posts (通过 post_id 关联) wp_term_taxonomy (通过term_taxonomy_id 关联)
wp_term_taxonomy 自定义分类法(包括默认的分类目录和标签) wp_term_relationships(通过 term_taxonomy_id关联)
wp_terms 关联到分类法中的分类目录,标签和自定义分类项目 wp_term_taxonomy (通过term_id 关联)
wp_posts
因为wp_posts会保留文章修订版本,即发布一篇文章,在数据库里是有两条的数据的。

删除文章修订版本

DELETE FROM wp_posts WHERE post_type = 'revision';
wp 媒体管理器上传图片的时候同时会生成attachment 文章格式,如果你不需要根据这个检索图片的话也可以删掉。

DELETE FROM wp_posts WHERE post_type = 'attachment';
wp_postmeta
这里是重灾区,可以执行以下命令

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';
如果你不需要管理你的多媒体文件可以使用下面这两句

DELETE FROM wp_postmeta WHERE meta_key = '_wp_attached_file';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_attachment_metadata';
综合到一起可直接执行下面两句

DELETE FROM wp_postmeta WHERE meta_key in ('_edit_lock', '_edit_last', '_wp_old_slug', '_revision-control', '{{unknown}}', '_wp_attached_file', '_wp_attachment_metadata');
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
wp_comments
删除所有垃圾评论

DELETE FROM wp_comments WHERE comment_type = 'trash';
删除所有待审评论

DELETE FROM wp_comments WHERE comment_approved = '0';
wp_commentmeta
一般来说直接删掉这个表就可以了,如果你使用了commentmeta存储信息请谨慎执行此句

TRUNCATE TABLE wp_commentmeta;
wp_options
尤其是使用网易云音乐,都会在wp_options表中产生大量垃圾数据。

DELETE FROM wp_options WHERE option_name LIKE '_transient_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%';
这样会删除所有临时数据,包括未过期的,谨慎使用。

经过上面多种方法,终于把速度提升到1秒以内。鼓掌撒花。
————————————————

原文链接:https://blog.csdn.net/linyl07/article/details/123748240

由于网站搬家,部分链接失效,如无法下载,请联系站长!谢谢支持!
1. 带 [亲测] 说明源码已经被站长亲测过!
2. 下载后的源码请在24小时内删除,仅供学习用途!
3. 分享目的仅供大家学习和交流,请不要用于商业用途!
4. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
5. 本站所有资源来源于站长上传和网络,如有侵权请邮件联系站长!
6. 没带 [亲测] 代表站长时间紧促,站长会保持每天更新 [亲测] 源码 !
7. 盗版ripro用户购买ripro美化无担保,若设置不成功/不生效我们不支持退款!
8. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
9. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
10.如果您购买了某个产品,而我们还没来得及更新,请联系站长或留言催更,谢谢理解 !
GG资源网 » WordPress网站优化之MySQL优化

发表回复

CAPTCHAis initialing...