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

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

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

Со временем база данных WordPress накапливает много «мусора»: ревизии записей, спам-комментарии, транзиенты, устаревшие метаданные и многое другое. Это замедляет запросы к базе, увеличивает размер резервных копий и нагрузку на сервер. Регулярная оптимизация помогает:

  • Уменьшить размер базы данных
  • Ускорить время отклика сайта
  • Избавиться от ненужных данных, которые не влияют на функциональность

Рассмотрим, как выполнить ключевые операции оптимизации вручную.

Удаление ревизий записей и автосохранений

WordPress сохраняет каждую ревизию записи, что может занимать много места. Для удаления ревизий можно использовать следующий SQL-запрос:

DELETE FROM wp_posts WHERE post_type = 'revision';

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

DELETE FROM wp_posts WHERE post_type = 'autosave';

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

Для автоматизации через PHP можно создать функцию wpkeys_optimize_remove_revisions():

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

Её можно запускать через хук админки или вручную.

Очистка спам и корзины комментариев

Спам-комментарии и удалённые комментарии (корзина) занимают место и замедляют выборки. Удалите их SQL-запросами:

DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';

В PHP для выполнения:

function wpkeys_optimize_clear_comments() {
    global $wpdb;
    $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
    $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'");
}

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

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

DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();

Или через PHP:

function wpkeys_optimize_delete_expired_transients() {
    global $wpdb;
    // Удаляем просроченные транзиенты
    $time = time();
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < {$time}");
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");
}

Оптимизация таблиц базы данных через SQL

После удаления данных имеет смысл выполнить оптимизацию таблиц, чтобы освободить пространство и дефрагментировать их. Для этого достаточно SQL-команды:

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

Или в PHP через цикл:

function wpkeys_optimize_tables() {
    global $wpdb;
    $tables = [
        $wpdb->posts,
        $wpdb->comments,
        $wpdb->options,
        $wpdb->postmeta,
        $wpdb->commentmeta
    ];
    foreach ($tables as $table) {
        $wpdb->query("OPTIMIZE TABLE {$table}");
    }
}

Удаление устаревших метаданных

Иногда плагины или темы оставляют в базе записи метаданных, которые больше не используются. Для примера, удалим метаданные постов, связанных с несуществующими записями:

DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;

Аналогично можно очистить комментарии метаданных.

Особенности и меры предосторожности

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

Выполняйте запросы через phpMyAdmin, Adminer или в консоли MySQL. Также можно добавить PHP-функции в файл темы или плагина и запускать их выборочно.

Автоматизация оптимизации базы данных без плагинов

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

function wpkeys_schedule_db_optimization() {
    if (!wp_next_scheduled('wpkeys_daily_db_optimization')) {
        wp_schedule_event(time(), 'daily', 'wpkeys_daily_db_optimization');
    }
}
add_action('wp', 'wpkeys_schedule_db_optimization');

function wpkeys_daily_db_optimization_callback() {
    wpkeys_optimize_remove_revisions();
    wpkeys_optimize_clear_comments();
    wpkeys_optimize_delete_expired_transients();
    wpkeys_optimize_tables();
}
add_action('wpkeys_daily_db_optimization', 'wpkeys_daily_db_optimization_callback');

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

Дополнительные рекомендации по повышению производительности базы данных

Помимо очистки, важно следить за правильной индексацией таблиц, использовать кеширование запросов и избегать чрезмерного количества ревизий путем ограничения их числа в wp-config.php:

define('WP_POST_REVISIONS', 5);

Также можно использовать специализированные плагины, например Clearfy Pro, которые дополнительно оптимизируют базу и отключают лишние функции.

WooCommerce: автоматическое изменение стоимости товара и удаление из корзины через AJAX без перезагрузки
03.05.2026
Как создать и использовать промышленные поля в WordPress для настройки форм
22.02.2026
Как создать адаптивный видео плеер в WordPress с использованием OmniVideo
28.02.2026
Как использовать REST API в WordPress для расширения функционала
21.11.2025
Как создать многоуровневую навигацию в WordPress с помощью hierarchical menu
13.04.2026

На оформлении, скоро здесь появится полноценный ресурс