У меня есть фильтр Post::with('media')->has('media')->paginate(50)
У меня есть 350 тыс. Строк в таблице публикаций и 270 тыс. Строк в медиафайлах
У меня есть индекс в медиа-таблице model_id
и model_type
поля и таблица сообщений published_at
поле.
Первый запрос:
SELECT
count(*) AS aggregate
FROM
`posts`
WHERE
EXISTS (
SELECT
*
FROM
`media`
WHERE
`posts`.`id` = `media`.`model_id`
AND `media`.`model_type` = 'App\Models\Post'
)
Выполнение: 972 мс
Второй запрос:
SELECT
*
FROM
`posts`
WHERE
EXISTS (
SELECT
*
FROM
`media`
WHERE
`posts`.`id` = `media`.`model_id`
AND `media`.`model_type` = 'App\Models\Post'
)
ORDER BY
`published_at` DESC
LIMIT 50 OFFSET 0
Выполнение: 1,7 с