Как уменьшить количество запросов в базу данных?

/ Просмотров: 3168

Видел на некоторых сайтах, на главной всего 1 запрос к базе, а у меня целых 5. Как можно это исправить?

Комментариев: 9 RSS

Сергей, есть один относительно простой вариант - настроить правильную работу кеширования на сайте. Вот на приложенном скриншоте сразу видно, что кеширование не включено никакое (для демо-сайта это пока нормально).

Как минимум, нужно на странице Настроек шаблона найти таб «Главная (units)» и задать свои настройки опции «Время кеширования главной страницы»:

cache-time.png

Включить кэширование запросов в database.php $db['default']['cache_on'] = TRUE;

Включить кэширование запросов в database.php $db['default']['cache_on'] = TRUE;

А как сбрасывать этот кэш, при необходимости? Например, если новые материалы появились.

А как сбрасывать этот кэш, при необходимости?

В консоли кнопка СБРОСИТЬ КЭШ СИСТЕМЫ.

По своему опыту могу сказать, что большое количество запросов не всегда плохо. Если запросы оптимизированы, то скорость их работы достаточно высока и не особо влияет на скорость сайта. Как, например, в самом начале этой записи на картинке - 18 SQL и 0.15 S - по-моему, уменьшать здесь количество запросов ни к чему.

Спасибо, Сергей!

Вопрос: кэширование, которое включено в database.php $db['default']['cache_on'] = TRUE;, чем откличается от кэширования, которое в шаблоне включается, выборочно? :

#добавляем в кэш
mso_add_cache($home_cache_key, ob_get_flush(), $home_cache_time * 60);
# используем кэширование
$home_cache_time = (int) mso_get_option('home_cache_time', 'templates', 0);
$home_cache_key = getinfo('template') . '-' .  __FILE__ . '-' . mso_current_paged() . '-' . $UNIT_NUM;

Екатерина, если по-простому, то mso_add_cache - это кэширование на уровне maxsite (например результатов работы тяжелых скриптов). database.php $db['default']['cache_on'] = TRUE - кеширование на уровне Code Igniter, в данном случае кэширование результатов выборки из БД. Иными словами, вместо того, чтобы обращаться к БД, CI идет в папку на сервере и ищет там закэшированый результат запроса -> если есть, возвращает его, нет - делает запрос.

Беда при таком подходе та, что любое изменение в БД не приведет к изменениям на сайте, пока не сбросить кэш. Поэтому лучше его не включать.