- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 38
SELECT NSLeft, NSRight FROM cms_forums WHERE id='1011' ORDER BY id ASC LIMIT 1 8.08238983154E-5 сек.
Надо искать запросы, которые красным отмечены, если они форумные, значит хост подтормаживает.
u.id as uid, u.nickname as author,
u.login as author_login,
t.title as threadtitle, t.id as threadid
FROM cms_forum_posts p
LEFT JOIN cms_forum_threads t ON t.id = p.thread_id AND t.is_hidden=0
INNER JOIN cms_forums f ON f.id = t.forum_id
LEFT JOIN cms_users u ON u.id = p.user_id
WHERE (f.NSLeft >= 144 AND f.NSRight <= 145)
ORDER BY p.id DESC
LIMIT 1 0.282637119293 сек.
этот запрос самый длительный получается
Индексы надеюсь стоят?
а как там закешировать форумы?
главные категории же не меняются, на них можно хоть на месяц кеш делать
как я понимаю форум на основе универсального каталога и непонятно тогда, что и в каталоге будут тормоза при 50 категориях например?
Да ладно...как я понимаю форум на основе универсального каталога и непонятно тогда, что и в каталоге будут тормоза при 50 категориях например?
Достаточно сделать файловое кеширование, файлы чистить при изменениях на форуме(добавили пост, тему, аль удалили). Кеш блоков у меня чистится каждые 5 минут, дабы даты менялись. Форум не кешировал, ибо нет нужды. Да и ещё на бежете(хостинг) мускул кеширует тоже. Поэтому первое открытие форума 0.3сек., последующие 0.03сек.
я пересоздаю индексы в cms_forums
id, NSLeft, NSRight
запросы выполняются примерно в 4 раза быстрее — 10 сек
запускаю в задачах крон оптимизацию таблиц и после оптимизации — 40 сек.
вот так номер. после оптимизации индексы слетают?
Вот что интересно
я пересоздаю индексы в cms_forums
id, NSLeft, NSRight
запросы выполняются примерно в 4 раза быстрее — 10 сек
запускаю в задачах крон оптимизацию таблиц и после оптимизации — 40 сек.
SELECT t.id
FROM cms_forum_threads t
INNER JOIN cms_forums f ON f.id = t.forum_id AND f.NSLeft >= '2' AND f.NSRight <= '7' AND f.published = 1 0.113020896912 сек.
SELECT p.id
FROM cms_forum_posts p
INNER JOIN cms_forum_threads t ON t.id = p.thread_id
INNER JOIN cms_forums f ON f.id = t.forum_id AND f.NSLeft >= '2' AND f.NSRight <= '7' AND f.published = 1 0.296095132828 сек.
этот всегда медленно
SELECT p.pubdate, p.id as post_id,
u.id as uid, u.nickname as author,
u.login as author_login,
t.title as threadtitle, t.id as threadid
FROM cms_forum_posts p
LEFT JOIN cms_forum_threads t ON t.id = p.thread_id AND t.is_hidden=0
INNER JOIN cms_forums f ON f.id = t.forum_id
LEFT JOIN cms_users u ON u.id = p.user_id
WHERE (f.NSLeft >= 2 AND f.NSRight <= 7)
ORDER BY p.id DESC
LIMIT 1 0.486695051193 сек.
как их можно оптимизировать?
При обьединении cms_forums+cms_forum_threads+cms_users, выбрать f.NSLeft >= 26 AND f.NSRight <= 27, но при этом выбрать id и тайтлы f.NSLeft >= 28 AND f.NSRight <= 29
Вот полный запрос — вывод одного поста ( взято с #8 -скрин eoleg) :
Почему то индексы в запросах не работали, хотя они есть — проверял из консоли мускуля, все индексы на месте
Пришлось явно указать в запросах какие индексы испльзовать
/components/forum/includes/forumcore.php
$sql = "SELECT p.pubdate, p.id as post_id,
u.id as uid, u.nickname as author,
u.login as author_login,
t.title as threadtitle, t.id as threadid
FROM cms_forum_posts p
LEFT JOIN cms_forum_threads t USE INDEX (forum_id) ON t.id = p.thread_id AND t.is_hidden=0
INNER JOIN cms_forums f USE INDEX (category_id) ON f.id = t.forum_id
LEFT JOIN cms_users u ON u.id = p.user_id
WHERE (f.NSLeft >= {$forumNS['NSLeft']} AND f.NSRight <= {$forumNS['NSRight']})
ORDER BY p.id DESC
LIMIT 1";
/components/forum/model.php
// ========================================================================================================= //
public function getCountThreadsFromForum($left_key, $right_key) {
$sql = "SELECT t.id
FROM cms_forum_threads t
INNER JOIN cms_forums f USE INDEX (PRIMARY) ON f.id = t.forum_id AND f.NSLeft >= '$left_key' AND f.NSRight <= '$right_key' AND f.published = 1";
$result = $this->inDB->query($sql);
return $this->inDB->num_rows($result);
}
// ========================================================================================================= //
// ========================================================================================================= //
public function getCountPostsFromForum($left_key, $right_key) {
$sql = "SELECT p.id
FROM cms_forum_posts p
INNER JOIN cms_forum_threads tUSE INDEX (id) ON t.id = p.thread_id
INNER JOIN cms_forums f USE INDEX (PRIMARY) ON f.id = t.forum_id AND f.NSLeft >= '$left_key' AND f.NSRight <= '$right_key' AND f.published = 1";
$result = $this->inDB->query($sql);
return $this->inDB->num_rows($result);
}
после этого мой форум стал открыватся первый раз не 48 секунд а 3 секунды
а следующие открытия 0.3 сек
сегодня вечером еще попробую с запросами поэксперементировать.
при критике прошу учесть что я не программист и не дизайнер.
А может я вообще все неправильно сделал?
у меня свой хостинг и мускуль оптимально настроен, с другими сайтами и цмс проблем небыло, возможно у меня чтото в базе слетело но я не смог найти ничего криминальногоПохоже, что мускул настроен так криво на хосте.
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 38