靠前方面:(优化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段
多人作者的 在后台编辑文章,如果有其他用户也在编辑,在文章列表页会提示下面的信息:
将当前编辑文章的用户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