【akisora经验分享】WordPress数据库优化实践方案精选

靠前方面:(优化MySQL文章搜索)

网站运行时间比较久,积累的文章数量较多的情况,需要对文章搜索进行搜索数据结果优化。 [chapter text="文章搜索优化"] 为了给站长作参考大家可以在优化前添页脚监测模板,请将以下代码放在footer.php文件任意合适位置。

?php echo get_num_queries(); ? 次加载共计耗时 ?php timer_stop( 1 ); ?

本站监测优化可以参考: [quote ids="700046"] [reply]

搜索优化开始:

将下述文件添加至主体模板的.php任意合适位置。

/** * 让 WordPress 只搜索文章的标题 */ 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的表中增加索引

索引创建MySQL 语法采用这种格式 INDEX

CREATE INDEX index - name ON table - name ( column -1 column -2 );

删除索引 DROP INDEX index-name ON table-name [chapter text="编辑锁定优化"]

优化_edit_lock段

多人作者的 在后台编辑文章,如果有其他用户也在编辑,在文章列表页会提示下面的信息:

【akisora经验分享】WordPress数据库优化实践方案精选

将当前编辑文章的用户ID 和时间戳存到一个叫做 _ 的自定义字段中,然后简单判断现在的时间戳减去存储的时间戳是否在 150 秒之内,如果是,就显示上面的信息。

将下述文件添加至主体模板的.php任意合适位置。

add_filter( update_post_metadata , function ($pre, $post_id, $meta_key, $meta_value) { if ($meta_key == _edit_lock ){ return wp_cache_set($post_id, $meta_value, wpjam_post_edit_lock , 300 ); } return $pre;}, 10 , 4 );add_filter( get_post_metadata , function ($pre, $post_id, $meta_key) { if ($meta_key == _edit_lock ){ return [wp_cache_get($post_id, wpjam_post_edit_lock )]; } return $pre;}, 10 , 3 );

第二方面:(优化清理MySQL的数据表)

[ text="关系表介绍"] 数据库的垃圾数据主要存在、 、 、 和

优化数据表关系:

文章、页面、附件、版本、导航菜单项目 (通过关联) 优化安全指数:★★★★★ [] 说明 :会保留文章修订版本,即发布一篇文章,在数据库里是有两条的数据的。 优化 :删除文章修订版本[/]

DELETE FROM wp_posts WHERE post_type = evision ;

每个文章的元数据 (通过 关联) 优化安全指数:★★ [] 说明 :后台上传图片或者附件后会在中生成_和_ta两个项。 优化 :删除附件记录信息[/]

DELETE FROM wp_postmeta WHERE meta_key = _wp_attached_file ; DELETE FROM wp_postmeta WHERE meta_key = _wp_attachment_metadata ;

优化安全指数:★★★★★ [] 说明 :删除_和_条目是安全的,所以这里给出SQL语句 优化 :删除[/]

DELETE FROM wp_postmeta WHERE meta_key = _edit_lock ; DELETE FROM wp_postmeta WHERE meta_key = _edit_last ;

优化安全指数:★★ [] 说明 :删除 旧的文章别名(slug) 优化 :慎重删除[/] 删除某篇文章的旧别名:

DELETE FROM `wp_postmeta` WHERE `meta_key` = _wp_old_slug AND `meta_value` = he-old-post-slug

删除所有文章的旧别名:

DELETE FROM `wp_postmeta` WHERE `meta_key` = _wp_old_slug

优化安全指数:★★★★ [mark_e] 说明 :版本控制和未知值 优化 :删除优化 [/mark_e]

DELETE FROM wp_postmeta WHERE meta_key = _revision-control ; DELETE FROM wp_postmeta WHERE meta_value = {{unknown}} ;

优化安全指数:★★★★★ [] 说明 :删除表中产生大量垃圾数据 优化 :放心删除[/]

DELETE FROM wp_options WHERE option_name LIKE _transient_% ; DELETE FROM wp_options WHERE option_name LIKE _transient_timeout_% ;

其他表暂时不说明优化策略,所以此处不加以详细的说明介绍。

其他优化删除

优化安全指数:★★★★★ 删除文章中不存在文章的元信息,这种删除比较安全,文章不存在了,其meta也肯定没有作用了。

DELETE FROM wp_postmeta WHERE post_id NOT IN ( SELECT post_id FROM wp_posts);

优化安全指数:★★★★★ 插件和回收站的记录删除,因为akismet插件本身就是在线拦截垃圾评论的,所以直接清空应该也是没有什么问题的。

DELETE FROM wp_commentmeta WHERE meta_key like %trash% or meta_key like %akismet% ; DELETE FROM wp_commentmeta WHERE comment_id NOT IN ( SELECT comment_id FROM wp_comments);

[/reply]

原文链接:https://www..com/701416.html

声明:本站所有作品(图文、音视频)均由用户自行上传分享,本文由"非此或彼"自行发布,本站仅供存储和学习交流。若您的权利被侵害,请联系我们删除。如若转载,请注明出处:https://www.flipbrief.com/fresh/8qq1vBRR.html