Оптимизация базы данных WordPress без плагинов: практические методы

База данных WordPress со временем накапливает много мусора: ревизии записей, спам-комментарии, транзиенты и ненужные таблицы. Это замедляет работу сайта и увеличивает нагрузку на сервер. В этой статье мы разберём, как оптимизировать базу данных вручную, без плагинов, используя SQL-запросы и собственные функции PHP. Такой подход позволяет точечно и безопасно очищать базу, понимать, что происходит, и не нагружать сайт лишними расширениями.

Почему важно оптимизировать базу данных WordPress

WordPress хранит всё содержимое в базе MySQL или MariaDB: посты, страницы, комментарии, настройки и метаданные. При активном использовании сайта со временем в базе накапливается много лишних данных:

  • Ревизии записей — автоматические сохранения, которые создаются при редактировании постов.
  • Спам- и удалённые комментарии, которые не нужны, но занимают место.
  • Транзиенты — временные данные, которые не всегда вовремя удаляются.
  • Оптимизация индексов и сжатие таблиц для ускорения запросов.

Если база раздута, это увеличивает время ответа при загрузке страниц, затрудняет резервное копирование и восстанавливает работу сайта.

Как проверить состояние базы данных в WordPress

Для начала нужно оценить, что именно занимает много места и какие таблицы нуждаются в очистке. Для этого можно использовать панель управления хостингом (phpMyAdmin) или подключиться к базе через консоль MySQL.

Например, чтобы посмотреть размер таблиц, выполните запрос:

SELECT table_name AS 'Таблица', ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Размер в МБ' FROM information_schema.TABLES WHERE table_schema = 'database_name' ORDER BY (data_length + index_length) DESC;

Замените database_name на имя вашей базы. Это даст представление, какие таблицы занимают место.

Удаление ревизий записей вручную

Ревизии — это версии постов, сохраняющиеся автоматически. Их может быть слишком много, особенно если часто редактировать записи. Чтобы удалить все ревизии, выполните SQL-запрос:

DELETE FROM wp_posts WHERE post_type = 'revision';

Если префикс таблиц отличается от wp_, замените его на ваш. Такой запрос удалит все ревизии из базы.

Для автоматизации можно создать функцию в файле functions.php вашей темы или в отдельном плагине:

function wpset_delete_post_revisions() {
    global $wpdb;
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}
wpset_delete_post_revisions();

Вызывать эту функцию нужно только один раз, после чего можно её удалить.

Ограничение количества ревизий для новых постов

Чтобы ревизии не накапливались снова, добавьте в wp-config.php следующую строку:

define('WP_POST_REVISIONS', 3);

Это ограничит количество ревизий до трёх на запись.

Очистка спам- и удалённых комментариев

Спам-комментарии и те, что находятся в корзине, также занимают место и влияют на производительность.

Для удаления спам-комментариев выполните запрос:

DELETE FROM wp_comments WHERE comment_approved = 'spam';

Для удаления комментариев из корзины:

DELETE FROM wp_comments WHERE comment_approved = 'trash';

Также полезно очистить метаданные удалённых комментариев:

DELETE pm FROM wp_commentmeta pm LEFT JOIN wp_comments wpc ON pm.comment_id = wpc.comment_ID WHERE wpc.comment_ID IS NULL;

Удаление истёкших транзиентов

Транзиенты — это временные данные, которые хранятся в таблице опций. Они создаются для кеширования и ускорения работы. Иногда старые транзиенты не удаляются автоматически, что создает мусор.

Чтобы удалить все истёкшие транзиенты, используйте такой SQL-запрос:

DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%' AND option_name IN (
  SELECT option_name FROM (
    SELECT option_name FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'
  ) AS temp_table
);

Для удобства можно написать PHP-функцию, которая удалит все транзиенты:

function wpset_delete_expired_transients() {
    global $wpdb;
    $time = time();
    $transients = $wpdb->get_col("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < $time");
    foreach ($transients as $transient) {
        $key = str_replace('_transient_timeout_', '', $transient);
        delete_transient($key);
    }
}
wpset_delete_expired_transients();

Оптимизация таблиц базы данных

После удаления мусорных данных полезно оптимизировать таблицы, чтобы освободить место и улучшить производительность.

Выполните запрос:

OPTIMIZE TABLE wp_posts, wp_comments, wp_options, wp_postmeta, wp_commentmeta;

Если у вас много таблиц, можно оптимизировать все сразу, получив список таблиц через SQL и сгенерировав запрос.

Автоматизация оптимизации с помощью WP-Cron

Чтобы не делать очистку вручную, можно настроить регулярное выполнение функций оптимизации через WP-Cron. Например, добавьте в functions.php:

if (!wp_next_scheduled('wpset_optimize_database_event')) {
    wp_schedule_event(time(), 'weekly', 'wpset_optimize_database_event');
}
add_action('wpset_optimize_database_event', 'wpset_optimize_database');
function wpset_optimize_database() {
    wpset_delete_post_revisions();
    wpset_delete_expired_transients();
    // Можно добавить удаление спама, корзины и оптимизацию таблиц с помощью $wpdb->query()
}

Это позволит автоматически поддерживать базу в хорошем состоянии.

Заключение: без плагинов — с контролем

Оптимизация базы данных WordPress вручную требует понимания структуры и возможных рисков, но даёт полный контроль и не нагружает сайт сторонним кодом. Используя SQL-запросы и собственные функции, вы сможете эффективно очищать базу, ускорять сайт и уменьшать нагрузку на сервер.

Всегда делайте резервные копии базы данных перед выполнением любых операций удаления или оптимизации, чтобы избежать потери данных.

WooCommerce: автоматическое отключение неактивных вариаций товаров
25.05.2026
WooCommerce: очистка неиспользуемых вариаций товаров и оптимизация базы данных
01.05.2026
Как создать автоматический импорт данных из Google Sheets в WordPress
09.02.2026
Как удалить неиспользуемые виджеты в WordPress с помощью кода
14.04.2026
WooCommerce: как разрешить оставлять отзывы только покупателям
29.05.2026