25 Dec
在MySQL中对表的数据进行删除操作时,实际上并没有真正的删除这些记录,而是被保存在链接清单中,这些多余数据不但占用数据库的存储空间,对效率也有一定的影响,WordPress中wp_comments、wp_options等表尤为容易产生这些多余的数据,因为它们往往比别的表进行更多的删除或更新操作。
使用SQL中的OPTIMIZE TABLE语句就可以对数据表进行整理,修复碎片,并且重新排序索引,提升性能,你可以通过phpMyAdmin或WordPress插件Optimize DB实现上述语句的功能,不过它们都需要手动进行,并不方便。
实际上只要通过下列十几行简单的PHP语句就可以在WordPress中实现定期整理数据库的目的,需要注意的是数据库在使用OPTIMIZE TABLE进行优化时会被锁定,因此不益过于频繁的进行此项操作,下面默认是半个月整理一次,应该是比较合适的。
/** * 添加计划周期 * * @version 0.1 * @author JinnLynn * @param array $schedules * @return array */ function JKit_AddScheduleRecurrence($schedules) { $schedules['semimonthly'] = array( 'interval' => 1296000, 'display' => __('Once Semimonthly') ); return $schedules; } add_filter('cron_schedules', 'JKit_AddScheduleRecurrence'); /** * 优化数据库,整理数据库碎片,重建索引 * * @version 0.1 * @author JinnLynn */ function JKit_OptimizeDB() { global $wpdb; $tables = $wpdb->get_results("SHOW TABLE STATUS"); foreach ($tables as $table) { if (!empty($table->Data_free)) $wpdb->query("OPTIMIZE TABLE " . $table->Name); } } add_action('optimizedb_automatically_schedule', 'JKit_OptimizeDB'); if (!wp_next_scheduled('optimizedb_automatically_schedule')) wp_schedule_event(time(), 'semimonthly', 'optimizedb_automatically_schedule');
note: wp_schedule_event必须在add_filter之后被执行,否则优化数据库的计划操作不会被成功执行。你可以使用JKit Builder生成带此功能的插件。











2 Comments so far
不错,有用呢!
博主。。非常非常喜欢你主题。自己又改不来。。
能不能送给我哦。。非常非常感谢啊。。gwy611@126.com
Leave a reply