gpt4 book ai didi

mysql - Laravel 加入分页

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:04 26 4
gpt4 key购买 nike

我正在使用 laravel(v-5.6) 分页。我有两个表:表 1 大小约 160 万行,表 2 大小约 80 万行。我正在根据某些条件执行连接操作。我的查询如下-

$results = $connection->table('table1' as db1")
->select('db1.id as kuchikomi_id','db1.comment as splitted_kuchikomi','db1.kuchikomi_sentiment','db1.status as kuchikomi_status','db2.id','db2.hotel_id','db2.comment','db2.post_date','db2.ota_name','db2.negative_comment','db2.positive_comment','db2.language')
->Join('table2' as db2", 'db1.kuchikomi_id', '=', 'db2.id')
->where('db1.kuchikomi_language', $language)
->whereIn('db1.id', $splitted_id))
->paginate(100);

此处 $splitted_id 是约 60 万个 ID 的集合。当我执行此查询时,它需要超过 12 分钟,并且由于超过最大执行时间而终止。

table1 索引 -

  • db1.kuchikomi_language
  • db1.id

我的问题是 - 连接操作是否适合这种大小的表?如果是,我怎样才能缩短执行时间?需要一些帮助来弄清楚这些疑问。谢谢。

最佳答案

由于 where 语句是性能问题的原因,您可以尝试为 db1.kuchikomi_languagedb1.id 创建复合索引,方法是在迁移:

$table->index(['kuchikomi_language', 'id']);

这将加快 where('db1.kuchikomi_language', $language) 语句的速度。

在那之后,如果这部分查询需要很长时间才能执行,您可以尝试使用过滤器而不是 whereIn('db1.id', $splitted_id)) 语句。您可以使用 Laravel Debugbar 进行分析.

这将使您有可能在过滤拆分后的 ID 之前和/或之后缓存结果,具体取决于过滤需要多长时间。

分页可能不是性能问题的原因,但分析一下也很好。

关于mysql - Laravel 加入分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com