Генеральная уборка или ускорение WordPress

Со временем вы заметите, что ваш блог уже не такой шустрый, как раньше. А всему виной «мусор», накопившийся в базе данных блога. Зайдите в phpMyAdmin и выполните следующие запросы:

SELECT * From wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;

DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);

DELETE FROM wp_comments WHERE comment_type = 'pingback';

DELETE from wp_comments WHERE comment_approved = '0'

Первый запрос удаляет неиспользуемые теги (метки), а остальные – мусор, вроде спам-комментариев и всего остального, что замедляет работу WP. Имя таблиц нужно заменить на свои (если вы изменили префикс таблиц).
После этого выберите все таблицы и выберите из меню действий Оптимизировать таблицу. После этого ваш блог заработает быстрее.
Поскольку приведенные выше действия нужно выполнять регулярно, скажем, раз в месяц – все зависит от популярности вашего блога, я решил создать PHP-сценарий, автоматизирующий данные задачи. Сценарий clean.php выполняет очистку блога от мусора и выполняет оптимизацию таблиц. Сценарий нужно поместить в один каталог с файлом wp-config.php.
По умолчанию сценарий работает в «тихом режиме» – выводит только выполняемые запросы, но не выводит результат выполнения. Вы можете, при желании, конечно, его модифицировать, добавив, например, количество удаленных записей или отчет об оптимизации. Но учтите, что функциональность сценария от этого лучше не станет.

Листинг. Сценарий clean.php
<?
echo "<p>Сценарий оптимизации WordPress
<p>&copy 2010 Денис Колисниченко
<p>";

include "wp-config.php";

// константы из wp-config.php
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME);

// список таблиц для оптимизации. Остальные таблицы редко требуют оптимизации
$optimize_tables[] = $table_prefix."commentmeta";
$optimize_tables[] = $table_prefix."comments";
$optimize_tables[] = $table_prefix."links";
$optimize_tables[] = $table_prefix."postmeta";
$optimize_tables[] = $table_prefix."posts";
$optimize_tables[] = $table_prefix."usermeta";

// удаляем мусор
$q = "DELETE a,b,c FROM $table_prefix"."posts a WHERE a.post_type = 'revision' LEFT JOIN ".$table_prefix."term_relationships b ON (a.ID = b.object_id) LEFT JOIN ".$table_prefix."postmeta c ON (a.ID = c.post_id);";
echo $q; echo "<p>";
mysql_query($q);

$q = "DELETE FROM $table_prefix"."comments WHERE comment_type = 'pingback';";
echo $q; echo "<p>";
mysql_query($q);

$q = "DELETE from $table_prefix"."comments WHERE comment_approved = '0';";
echo $q; echo "<p>";
mysql_query($q);

$q = "SELECT * From ".$table_prefix."terms wt INNER JOIN $table_prefix"."term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;";
echo $q; echo "<p>";
mysql_query($q);

// формируем запрос для оптимизации
$q = "OPTIMIZE TABLE ";
foreach ($optimize_tables as $v)
$q = $q . "$v , ";

$q = $q . $table_prefix."users;";
mysql_query($q);
echo $q;

echo "<p>Оптимизация выполнена";

?>

Скачать сценарий оптимизации можно по адресу:

http://dkws.net/clean.zip