сортировкой по created_at.
SELECT notes.* FROM notes
WHERE notes.id IN (
SELECT T1.id
FROM notes as T1
WHERE (
SELECT COUNT(*)
FROM notes as T2
WHERE T2.category_id = T1.category_id
AND T2.created_at > T1.created_at
AND T1.user_id = T2.user_id
) < 2
)
AND user_id = 6
После добавления индексов время запроса не зависит от общего количества полей, но зависимость от подпадающего под параметр user_id полей линейна. То есть если подпадает 200 полей = 2 секунды, 400 = 4.
Как оптимизировать? Где спросить, если здесь не помогут?
Тут даже не линейная а 2n, у тебя же 2 подзапроса, один в IN() и второй внутри первого в WHERE, оптимизировать - хз, накидай схему на sqlfiddle и скажи что ожидаешь получить
Ты скажи что ты хочешь получить, а потом тебе помогут. Возможно тебе достаточно GROUP BY category_id HAVING num > N
Обсуждают сегодня