Top.Mail.Ru
Mysql задолбало - lleo — LiveJournal
? ?

Mysql задолбало - lleo — LiveJournal

Nov. 21st, 2020

06:06 pm - Mysql задолбало

Previous Entry Share Flag Next Entry

это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/11/21

Сервер lleo.me время от времени подтормаживает, в основном из-за Mysql. Я уже чинил всякие запросы, индексы. Вчера я страницу https://lleo.me/dnevnik/comm сильно доработал по вашим просьбам, теперь там видно, на чей коммент кто отвечал, а если на ваш, то еще и красным показывает. При этом заметил: если нажимаю ссылку «предыдущие комменты», то сервер подвисает в половине случаев уж точно. Стал разбираться и увидел сложную конструкцию. Ну, как сложную... Сильно упрощая, выглядит так:

SELECT c.*,u.*,z.*
FROM `comments` AS c
JOIN `publications` AS z ON c.`num`=z.`num`
LEFT JOIN `users` AS u ON c.`user`=u.`user`
WHERE 1 AND c.`Time`<'1605909120' ORDER BY c.`Time` DESC LIMIT 50


Логика проста: движок берет 50 комментариев от некого момента во времени, но к каждому нужна бы дополнительная информация из других таблиц. Поэтому пытается подсосать информацию о заметке, к которой комментарий относится (известен номер заметки), а также информацию об авторе комментария (известен его номер, хотя в базе может не оказаться). Все мыслимые индексы есть для всех таблиц.

Не понимаю, почему Mysql с этим нехитрым на мой взгляд вопросом так туго справляется. Короче, я психанул и сделал вместо этой конструкции просто три разных запроса. Сперва вынимаю 50 комментариев, затем информацию об их заметках (обычно 50 комментариев относятся к двум последним заметкам), затем инфо об авторах (авторов тоже раза в четыре меньше, чем комментариев). И внезапно тормозить перестало! Либо я был неверного мнения о способностях Mysql оптимизировать запросы, либо запрос был как-то совсем неверно написан с точки зрения Mysql, и выполнять оно начинало его с другого конца, производя миллиард обратных сравнений по дате комментария. Сейчас я и процедуру комментов под заметкой так же переделал — там, правда, стыковались не все три базы, а всего две (информация о заметке и так известна), и работа выполнялась не с каждым посетителем, а густо кэшировалась в memcache (в отличие от страницы /comm, изначально предполагалось, что я туда хожу один). В общем, тоже сделал два запроса.

Если будут глюки — пишите lleo@lleo.me



это перепост заметки, оригинал находится на моем сайте: https://lleo.me/dnevnik/2020/11/21

Comments:

From:(Anonymous)
Date:November 21st, 2020 04:07 pm (UTC)
(Link)
ллео - тупорылый говноед
(Reply) (Thread)
[User Picture]
From:freedom_of_sea
Date:November 21st, 2020 04:26 pm (UTC)
(Link)
explane ?
(Reply) (Thread)
From:(Anonymous)
Date:November 21st, 2020 05:53 pm (UTC)
(Link)
ллео - тупорылый говноед
(Reply) (Parent) (Thread)