Size: a a a

2020 June 22

S

Syntax Highlight Bot in MySQL
источник

AM

Alexey Medov in MySQL
Ilia Zviagin
Сколько записей попадает под это условие?

where chat_id = 481784 and new = 1 and author_id = 276612 and chat_messages.deleted_at is null

?
ноль
источник

IZ

Ilia Zviagin in MySQL
Ну, у тебя ни одного составного ключа нет, а  условие составное.
источник

IZ

Ilia Zviagin in MySQL
Alexey Medov
ноль
чего? как так?
источник

AM

Alexey Medov in MySQL
Ilia Zviagin
чего? как так?
select * from chat_messages where chat_id = 481784 and new = 1 and author_id = 276612 and chat_messages.deleted_at is null;
Empty set (0.183 sec)
источник

IZ

Ilia Zviagin in MySQL
Короче, я согласен с Акромегалом, 2 сек -- много.
источник

IZ

Ilia Zviagin in MySQL
Alexey Medov
select * from chat_messages where chat_id = 481784 and new = 1 and author_id = 276612 and chat_messages.deleted_at is null;
Empty set (0.183 sec)
Ну , это потому что ты уже проUPDAT-ил... А ДО сколько было?
источник

AM

Alexey Medov in MySQL
Ilia Zviagin
Ну , это потому что ты уже проUPDAT-ил... А ДО сколько было?
я как бы сам этот апдейт не делал, это делал бэкенд, я лишь в slow-logs посмотрел
источник

AM

Alexey Medov in MySQL
соотвественно что было до не знаю
источник

IZ

Ilia Zviagin in MySQL
Alexey Medov
select * from chat_messages where chat_id = 481784 and new = 1 and author_id = 276612 and chat_messages.deleted_at is null;
Empty set (0.183 sec)
Тут надо индекс по
( chat_id, `author_id, new ) или хотя бы ( chat_id, `author_id)

у тебя их нет.
источник

AM

Alexey Medov in MySQL
Alexey Medov
Илья добрый день. Хотелось бы услышать ваше мнение на счет запроса.

update `chat_messages` set `new` = 0, `chat_messages`.`updated_at` = '2020-06-22 13:46:18' where `chat_id` = 481784 and `new` = 1 and `author_id` = 276612 and `chat_messages`.`deleted_at` is null;


Он выполнился за 2.057843 секунды. Нормальное ли это время выполнения по вашему ?

Просто мой руководитель часто говорит что у нас не должны быть запросы которые выполняются больше 1 секунды.
вот такая запись в логе на этот запрос

# Query_time: 2.057843  Lock_time: 0.000015  Rows_sent: 0  Rows_examined: 2
# Rows_affected: 1  Bytes_sent: 52
источник

AM

Alexey Medov in MySQL
Ilia Zviagin
Тут надо индекс по
( chat_id, `author_id, new ) или хотя бы ( chat_id, `author_id)

у тебя их нет.
Я понял, вина разработчиков кто проектировал БД и таблицы
источник

IZ

Ilia Zviagin in MySQL
Alexey Medov
я как бы сам этот апдейт не делал, это делал бэкенд, я лишь в slow-logs посмотрел
Я так понимаю, это типа новые сообщения, и они помечаются  как не новые.
Если так, то селективность может прыгать наверное сильно. То там будут 3 сообщения, то 1000.
источник

AM

Alexey Medov in MySQL
Ilia Zviagin
Я так понимаю, это типа новые сообщения, и они помечаются  как не новые.
Если так, то селективность может прыгать наверное сильно. То там будут 3 сообщения, то 1000.
Что то типа того да
источник

AM

Alexey Medov in MySQL
Крутится все на SSD, 8 ядер, 10 ГБ оперативки из которых 7.5 ГБ это буфер иннодб. Нагрузка на CPU в 99% случаев не превышает 0.1%
источник

AM

Alexey Medov in MySQL
Может ли быть что дело в параметре
innodb_flush_log_at_trx_commit = 1
?
источник

S

Syntax Highlight Bot in MySQL
Alexey Medov
Может ли быть что дело в параметре
innodb_flush_log_at_trx_commit = 1
?
источник

ls

løst søul in MySQL
Ilia Zviagin
Тут надо индекс по
( chat_id, `author_id, new ) или хотя бы ( chat_id, `author_id)

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

AM

Alexey Medov in MySQL
@acromegale @MasterZiv Я вас понял, спасибо за советы. Буду своим разрабам говорить если что, что они сами виноваты в такой скорости)))
источник

IZ

Ilia Zviagin in MySQL
løst søul
тут нада в таблице диалогов завести колонку с last_message_id, и теребить ее, вместо половины всей таблицы
Ну да, либо дату последнего чтения чата.
источник