Медленная работа сортировки по произвольному полю
Здравствуйте
Столкнулся с такой проблемой - организовываю сортировку постов по произвольному полю (кол-во просмотров):
global $query_string; query_posts( $query_string . "&meta_key=_post_views_count&orderby=meta_value_num&posts_per_page=64");
Работает, но время генерации страницы увеличивается в 2-3 раза по сравнению с дефолтной выдачей.
Помогите решить
страница генерируется за 0,18-0,2 сек при тех же 64 постах без сортировки и 0,5 - 0,6 с ней.
меряю функцией
function usage() { printf(('%d / %s'), get_num_queries(), timer_stop(0, 3)); if ( function_exists('memory_get_usage') ) echo ' / ' . round(memory_get_usage()/1024/1024, 2) . 'mb '; } add_action('admin_footer_text', 'usage');
соответственно, подгрузка картинок не учитывается
Сколько записей на сайте, конкретно этого типа?
Установите плагин query monitor, найдите этот запрос там, выложите сюда сам SQL запрос. Тогда возможно что-то станет ясно, где там можно улучшить запрос.
Вообще, сортировка по метаполю в таком случает очень медленная и увеличение количества постов будет значительнее обычного сказываться на скорости. Это потому что при &orderby=meta_value_num SQL переводит каждое значение в числовое и только потом сортирует...
Если у вас в самом запросе нет чего-то неправильного, то решение тут одно: добавить дополнительное числовое поле в таблицу wp_posts (например views) и сортировать по нему, но это все не так просто.
постов 2,5к.
плагин указывает на медленный запрос
собственно, в нем и дело
Выполнил такой же запрос, на своем сайте, запрос на удивление быстрый...
У вас что-то с БД походу. Сколько времени на сам запрос уходит? У меня вот что получилось (Обрабатывались тут 1к постов) в 2 раза меньше вашего:
Сколько времени на запрос у вас уходит?
Возможно у вас таблицы не оптимизированы, индексы путаются. Их нужно оптимизировать иногда. Поставьте плагин WP Database Optimizer. Запустите оптимизацию и затем проверьте еще раз этот запрос...
запрос выполняется за 0,24 (!)
без сортировки - все запросы страницы за < 0,03
поставил плагин/оптимизировал - запрос выполнился за 0.003!
Проблема решилась на этом проекте.
Попробовал такую же штуку провернуть на сайте с 11к постами - чуть быстрее, но 0,3+. Без сортировки, как в предыдущем случае - все запросы страницы за < 0,03
Эта проблема упоминается здесь и быстрого решения без курения манов, похоже, нет.
Возможно, подойдет плагин WP Sphinx Search, буду ковырять.
Спасибо за помощь!
Гугл солидарен с вами и рекомендует добавить доп. поле в таблицу wp_posts. Расскажите, пожалуйста, как это реализовать
Подробно рассказывать долго и время нет. Коротко так:
Запустите такой запрос в sql:
Возможно нужно еще добавить индекс этого поля:
Далее, в запрос добавьте сортировку по
views
Вам нужно изменить код плагина, который подсчитывает просмотры и сделать так чтобы он записывал их в созданное поле а не в метаполя.
Этого более чем достаточно. Спасибо!