rocket1 Опубликовано 2 Августа 2010 Жалоба Поделиться Опубликовано 2 Августа 2010 (изменено) Форум большой - ibf_posts.MYD занимает 200 мегабайт, 200000 записей, ibp_posts.MYI порядка 100 мегабайт.Делаю простой select запрос:SELECT * FROM ibf_posts WHERE topic_id IN ( SELECT pid FROM ibf_topics WHERE forum_id = 102 ) AND topic_id <200 Результат: 2 строки всего, запрос занял 114.6393 сек! Не подскажите - из-за чего так долго выполняется запрос? Как его можно соптимизировать?Других коннекций к базе кроме данной не имеется.Версия форума 2.3.6Тип таблицы MyISAM Изменено 2 Августа 2010 пользователем rocket1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 FatCat Опубликовано 2 Августа 2010 Жалоба Поделиться Опубликовано 2 Августа 2010 Смысл вложенного запроса на большой базе? Не рациональней будет разбить на 2 запроса?У меня на одном из форумов примерно такие же размеры таблиц. SELECT pid FROM ibf_topics WHERE forum_id = 102 AND pid < 200 - этот вообще пару милисекунд.В цикле собрать айдишники и подставить в строку второго запроса - время выполнения будет примерно 0.015 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 2 Августа 2010 Жалоба Поделиться Опубликовано 2 Августа 2010 Если в вашем понимании это простой запрос, то что тогда сложный. Объясните смысл этого запроса? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Ritsuka Опубликовано 2 Августа 2010 Жалоба Поделиться Опубликовано 2 Августа 2010 А у вас неплохой сервер, раз выполняет сей дебильный запрос на такой базе всего за 2 минуты) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 rocket1 Опубликовано 3 Августа 2010 Автор Жалоба Поделиться Опубликовано 3 Августа 2010 (изменено) Подобным запросом я хочу удалить все посты с определённого форума.DELETE FROM ibf_posts WHERE topic_id IN ( SELECT pid FROM ibf_topics WHERE forum_id = 102 )Штатная функция очистки форума через админку вешает напрочь страничку и базу.Например, очистка раздела из 20 тем и 1000 постов через минуту таймаута уходит в ошибку HTTP 504 Gateway Timeout. Только с третьей итерации форум очищается. Что посоветуете делать? Изменено 3 Августа 2010 пользователем rocket1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 3 Августа 2010 Жалоба Поделиться Опубликовано 3 Августа 2010 Полнотекстовый индекс стоит на ibf_posts? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 rocket1 Опубликовано 3 Августа 2010 Автор Жалоба Поделиться Опубликовано 3 Августа 2010 Полнотекстовый индекс стоит на ibf_posts?Да: http://a.imageshack.us/img37/8274/indexes.gif Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 GiV Опубликовано 3 Августа 2010 Жалоба Поделиться Опубликовано 3 Августа 2010 Удалите индекс. Осуществите удаление большого количества сообщений. Восстановите индекс. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 Chrno Опубликовано 3 Августа 2010 Жалоба Поделиться Опубликовано 3 Августа 2010 А лучше индекс не восстанавливайте, и поиск сделайте через Sphinx - дышать станет легче. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
0 rocket1 Опубликовано 3 Августа 2010 Автор Жалоба Поделиться Опубликовано 3 Августа 2010 Спасибо! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Вопрос
rocket1
Форум большой - ibf_posts.MYD занимает 200 мегабайт, 200000 записей, ibp_posts.MYI порядка 100 мегабайт.
Делаю простой select запрос:
Результат: 2 строки всего, запрос занял 114.6393 сек!
Не подскажите - из-за чего так долго выполняется запрос? Как его можно соптимизировать?
Других коннекций к базе кроме данной не имеется.
Версия форума 2.3.6
Тип таблицы MyISAM
Изменено пользователем rocket1Ссылка на комментарий
Поделиться на других сайтах
9 ответов на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.