Добрый день! Ребят, я много гуглил и насколько я понял, простого решения нет. Индексы не помогают, может вы дадите мне подсказку.
Есть таблица А с некоторыми записями. Их я разбиваю пагинацией по 10 на страницу. К одной записи из таблицы А может быть прикреплено 100к, 400к, 1kk и более записей записей из таблицы B.
Мне нужно выводить счетчик, сколько записей в таблице B прикреплено данных к записи в таблице А.
Сейчас я фильтрую их в том числе по датам, но иногда нужно получить данные за все время. Запрос обрабатывается довольно долго, как можно, максимально ускорить это дело?
У меня есть 2 идеи, загружать страницу без счетчика и асинхронно подгружать счетчик, тогда страница будет быстро грузится, но актуальные данные все равно будут недоступны довольно долго. И другой вариант, по сути тоже самое, ставить запрос в очередь и отдавать данные через веб сокет, но проблема будет такая же как в первом варианте.
"Запрос обрабатывается довольно долго, как можно, максимально ускорить это дело?"
А можно глянуть запрос?
Также не мешало бы видеть индексы в таблице В и поле связи А с В
Максим, Сообщения у меня связаны с flows по newsletter_id не по project_id. Я беру все нужные данные из модели flows по project_id, а потом тянутся сообщения по id, newsletter_id
Андрей Бойченко, советую не удалять индексы, если удалите все, у Вас станет почти колом =)
На данный момент вижу несколько ненужных прям 100% но это влияет на скорость добавления.
select m.newsletter_id, count(m.id) cnt
from flow f, message m
where f.id = m.newsletter_id
group by m.newsletter_id
select count(m.id) cnt
from message m
where m.newsletter_id= your_newsletter_id
Максим, прошу прощения за наглость, но я в недоумении, вот этот код отрабатывает очень быстро.
select count(m.id) cnt
from message m
where m.newsletter_id= your_newsletter_id
А вот для другой таблицы, у которой 900к записей
select count(id) cnt from segments_emails where project_id = 10 group by segment_id
отрабатывает 14 сек. Растолкуйте пожалуйста, почему так, вероятно дело в индексах. Тогда какие индексы будут корректными для данной таблицы? Для меня было очевидным установить 2 индекса, которые на скриншоте.
Андрей Бойченко, два индекса? Это mysql? Если да, то идите читать как работают индексы. Мускул использует ровно один индекс на одну таблицу. Если нужно - комбинированный, да так, что бы отсекал все по вашим условиям.