Увеличение производительности плагина NextGen Gallery
Добавляем необходимые индексы в таблицу
В случае, если галереи содержат несколько тысяч изображений, в зависимости от мощности сервера и посещаемости сайта могут возникнуть проблемы с производительностью, связанные с неоптимальностью индексов в таблице wp_ngg_pictures.
Проявляется это в том, что при отображении любой галереи MySQL приходится полностью сканировать таблицу wp_ngg_pictures.
Например:
[-]
View Code MySQL
EXPLAIN
SELECT SQL_CALC_FOUND_ROWS tt.*, t.*
FROM wp_ngg_gallery AS t INNER JOIN wp_ngg_pictures AS tt ON t.gid = tt.galleryid
WHERE t.gid = 3 AND tt.exclude<>1
ORDER BY tt.sortorder ASC
SELECT SQL_CALC_FOUND_ROWS tt.*, t.*
FROM wp_ngg_gallery AS t INNER JOIN wp_ngg_pictures AS tt ON t.gid = tt.galleryid
WHERE t.gid = 3 AND tt.exclude<>1
ORDER BY tt.sortorder ASC
[-]
View Code Text
+----+-------------+-------+-------+---------------+---------+---------+-------+--------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+--------+----------------+
| 1 | SIMPLE | t | const | PRIMARY | PRIMARY | 8 | const | 1 | Using filesort |
| 1 | SIMPLE | tt | ALL | NULL | NULL | NULL | NULL | 11700 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+--------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+--------+----------------+
| 1 | SIMPLE | t | const | PRIMARY | PRIMARY | 8 | const | 1 | Using filesort |
| 1 | SIMPLE | tt | ALL | NULL | NULL | NULL | NULL | 11700 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+--------+----------------+
Исправляется ситуация путём добавления ключа по столбцам galleryid и sortorder в таблицу wp_ngg_pictures:
[-]
View Code MySQL
ALTER TABLE `wp_ngg_pictures` ADD KEY (`galleryid`, `sortorder`)
После этого EXPLAIN покажет значительно лучшую картину:
[-]
View Code Text
+----+-------------+-------+-------+---------------+-----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-----------+---------+-------+------+-------------+
| 1 | SIMPLE | t | const | PRIMARY | PRIMARY | 8 | const | 1 | |
| 1 | SIMPLE | tt | ref | galleryid | galleryid | 8 | const | 59 | Using where |
+----+-------------+-------+-------+---------------+-----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-----------+---------+-------+------+-------------+
| 1 | SIMPLE | t | const | PRIMARY | PRIMARY | 8 | const | 1 | |
| 1 | SIMPLE | tt | ref | galleryid | galleryid | 8 | const | 59 | Using where |
+----+-------------+-------+-------+---------------+-----------+---------+-------+------+-------------+
Как видим, использование правильного индекса позволяет избежать файловой сортировки; к тому же, из таблицы wp_ngg_pictures сразу выбираются только нужные данные (59 строк против 11,700 строк).
Связанные записи
Автор: Vladimir; опубликовано в: WordPress; метки: MySQL, NextGen Gallery, плагин, производительность6
Июнь
2009
Июнь
2009


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






Так что, достаточно просто выполнить запрос?
ALTER TABLE `wp_ngg_pictures` ADD KEY (`galleryid`, `sortorder`)
И всё?
В принципе, да. На сайте с десятком тысяч фотографий и кучей галерей и альбомов это позволило снизить нагрузку на MySQL.