Таблица wp_options может быть очень раздутой из – за все настроек, размещенных там по темам и плагинам. Приходиться иногда чистить таблицы для своих клиентов, чтобы ускорить приборную панель WP-администратора. Если вы используете плагин, который хранит много переходных или сеансовые данных в таблице параметров, то есть два способа ускорить: использование кэша объектов и добавление индекса MySQL. Решение кэша объектов поставит таблицу параметров в демон, как Redis или Memcached, поэтому значения могут быть выбраны из оперативной памяти. Другим решением является добавление индекса к таблице wp_options таким образом, чтобы найти соответствующие варианты, которые занимают меньше времени (индекс MySQL аналогичен индексу в большой книге).
В этом посте мы покажем вам, как узнать, существует ли индекс, является ли индекс хорошей идеей, и, наконец, как добавлять и удалять индекс wp_options, чтобы увидеть, как он улучшает производительность. Мы рекомендуем использовать New Relic (https://newrelic.com) для измерения времени запросов к базе данных, если это возможно.
Во-первых выяснить, существует ли индекс, измените wp_options в случае, если вы изменили префикс базы данных в wp-config.php или с плагином.
Вы можете запустить эти команды из PhpMyAdmin, Adminer или с помощью wp-cli для команд запроса в базе данных.
SHOW INDEX FROM wp_options;
Если вы видите только таблицу ниже, то нет индекса присутствует
+------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | wp_options | 0 | PRIMARY | 1 | option_id | A | 511 | NULL | NULL | | BTREE | | | | wp_options | 0 | option_name | 1 | option_name | A | 511 | NULL | NULL | | BTREE | | | +------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Но если вы видите, индекс column_name
с величиной autoload
или что – то подобное, то у вас уже есть индекс.
+------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | wp_options | 0 | PRIMARY | 1 | option_id | A | 670 | NULL | NULL | | BTREE | | | | wp_options | 0 | option_name | 1 | option_name | A | 670 | NULL | NULL | YES | BTREE | | | | wp_options | 1 | autoload | 1 | autoload | A | 1 | NULL | NULL | | BTREE | | | +------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Ярлык для листинга индексов
SHOW INDEX FROM wp_options WHERE column_name != 'option_id' AND column_name != 'option_name';
Во- первых выяснить, хорошая ли идея, чтобы добавить индекс в таблицу wp_optins путем сравнения количества строк autoload = yes
с количеством строк autoload = no
SELECT COUNT(CASE WHEN autoload = 'yes' THEN 1 END) FROM wp_options;
Узнайте, сколько не автозагружаются
SELECT COUNT(CASE WHEN autoload = 'no' THEN 1 END) FROM wp_options;
Как правило, вы хотите, чтобы число вариантов autoload = no
значительно перевешало вариантов autoload = yes
CREATE INDEX autoload ON wp_options(autoload, option_name);
Если вы используете New Relic, вы можете увидеть улучшение времени запросов, обратите внимание, как коричневый участок практически исчезает где то в 8 утра на графике!
Если вы хотите, удалить индекс, то этот оператор удалит индекс MySQL для таблицы wp_options
DROP INDEX autoload ON wp_options