Laravel 7 有('关系')与分页减慢查询速度



我有过滤器Post::with('media')->has('media')->paginate(50)我在后表中有350k行,在介质中有270k行

我在媒体表model_idmodel_type字段以及发布表published_at字段中有索引。

第一个查询:

SELECT
count(*) AS aggregate
FROM
`posts`
WHERE
EXISTS (
SELECT
*
FROM
`media`
WHERE
`posts`.`id` = `media`.`model_id`
AND `media`.`model_type` = 'AppModelsPost'
)

执行:972ms

第二个查询:

SELECT
*
FROM
`posts`
WHERE
EXISTS (
SELECT
*
FROM
`media`
WHERE
`posts`.`id` = `media`.`model_id`
AND `media`.`model_type` = 'AppModelsPost'
)
ORDER BY
`published_at` DESC
LIMIT 50 OFFSET 0

执行:1.7s

Count只返回1行

和您的select *50,这只需要时间。

要检查2个查询之间的差异,请尝试EXPLAIN

EXPLAIN  SELELCT...

因此,您可以更好地了解mysql对查询所做的工作

最新更新