Mysql. Игры разума. 2.X

Ничего не понимаю в поведении мускула.

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 2515
Небольшая предыстория:
Давно хочу обновить свой сайт до актуальной версии. Но не просто обновить, а практически создать сайт заново и потом инсертить данные в таблицы не изменяя их структуры. При этом правильно создать новые поля в типах контента, избавиться от напрасных компонентов, которые давно удалены, но тут и там всплывают их следы, правильно сделать хуки с учетом накопленного опыта и т.д. То есть глобальная работа над ошибками.
Надеюсь таким образом получить правильно сделанный сайт с правильной структурой и предсказуемым поведением.
Все работы производятся на опенсервере, конфигурация mariadb дефолтная.
Таблицы не мигрирую целиком, а переношу данные инсертом, чтобы не трогать структуру новых таблиц.
То есть например:
Спойлер
И всё шло хорошо, пока дело не дошло до комментариев. А их миллион. И после инсерта комментариев из старой базы в новую новый сайт встал колом. Загрузка виджета комментариев 38 секунд.
Спойлер
Стал удалять из запроса по таблице и выяснил, что если не делать запросов в cms_sessions_online, то есть просто установить
Код SQL:
  1. LEFT JOIN cms_sessions_online AS online ON online.user_id = 1
то всё летает. Запрос выполняется за 0.00000 секунд

Стал экспериментировать с индексами таблицы cms_sessions_online. И выяснил интересную вещь. Если добавить в индекс date_created столбец user_id, то запросы в комментариях начинают выполняться за ноль секунд. Всё опять летает!
Спойлер
Спойлер
Кто-нибудь из понимающих сможет мне объяснить в чем дело?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3388
Насчет мариидб не скажу, но знаю что в мускуле в вашем примере использовались бы две таблицы индексов из-за чего всё тормозило. То есть сначала прошлись по одной таблице построили список, затем по второй таблице этот список скорректировали. После внесения правок в индексах у вас стала использоваться одна таблица индексов - на выходе сразу получается один готовый список.

То есть у вас есть миллион комментов.Один коммент должен получить инфу о пользователе и узнать этот пользователь онлайн или оффлайн.

В изначальном запросе один коммент определял сначала всех пользователей кто онлайн и потом в них искал своего автора. И все это помноженное на миллион раз.

После правки у вас появилась одна таблица индексов с информацией о конкретных пользователях из которой сразу берется инфа о конкретном пользователе и вычисляется его статус онлайн.

Кстати, для эксперимента, если поменять местами - сделать сначала user_id, а потом date_created - то сколько времени займет это в мариидб?
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форума
Сообщений: 2175
Ris:
Стал экспериментировать с индексами таблицы cms_sessions_online. И выяснил интересную вещь. Если добавить в индекс date_created столбец user_id, то запросы в комментариях начинают выполняться за ноль секунд. Всё опять летает!
Проверил, так и есть. Даже при небольшом количестве зарегистрированных пользователей, скорость авторизации на сайте выросла!
Так же таблица cms_sessions_online часто влияет на любой серфинг по сайту. После добавления в индекс date_created столбец user_id, выросла и скорость серфинга.
Лучшее место для вашего сайта!
В начало страницы
Предыдущая темаПерейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.