Поддержка Проблемы и решения Из 21 запроса к БД сделать 1

  • Здравствуйте!
    Поскольку очень поверхностно знаком с mysql, прошу помочь в построении запроса. Суть: вывести по одному последнему посту (а вернее — название рубрики, время, миниатюру, заголовок с сылкой) из 20 категорий. Сейчас у меня работает такой код:

    function posts_regions () {
    $all_cats_ids = array(2171,2172,2173,2174,2175,2176,2177,2178,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612);
    $idp = array();
    for ($o = 0; $o < count($all_cats_ids); $o++) {
    $args = array(
         'numberposts' => 1
        ,'category' => $all_cats_ids[$o]
        ,'post_status' => 'publish'
    );
    $result = wp_get_recent_posts($args);
    $idp[] = $result[0]['ID'];
    }
    
    query_posts(array('post__in' => $idp, 'ignore_sticky_posts' => 1, 'posts_per_page' => 21));
    if( have_posts() ){
          while( have_posts() ){
    //...
          }
          wp_reset_query();
    } else {
       echo 'Произошла ошибка! Приносим свои извинения...';
    }
    }

    Подозреваю, что здесь происходит много запросов к БД 😉 Поскольку размер БД уже сейчас более 100 МБ, то на выделенный сервер ложится непомерная нагрузка… Помогите построить запрос к БД!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Из 21 запроса к БД сделать 1

    Предложу попробовать «легкий» и понятный вариант кеширования. Если новые записи появляются не ежесекундно :), то используйте http://codex.wordpress.org/Transients_API#Complete_Example

    Вам лучше «кешировать» первую часть своего скрипта, то бишь найденные ID постов, а можно попробовать в несколько уровней, это даже лучше будет.

    Основная логика такова — выполняем запрос, заносим в БД найденные ID постов, берем из БД — «довыполняем» запрос (вывод). Все это дело «повесить» на хуки создания/удаления/перемещения поста, и при их исполнении обновлять эту строку в БД. То есть основную нагрузку будет создавать админ/автор записей, а посетителю будет отдаваться уже наполовину исполненный запрос.

    Дерзайте! )

    Спасибо, подумаю над таким способом!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Из 21 запроса к БД сделать 1» закрыта для новых ответов.