You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将SQL转换为Laravel Eloquent,解决大数据量查询卡顿问题

Laravel Eloquent 转换与查询优化建议

一、SQL转Eloquent实现

对应你提供的SQL,Eloquent可以这样实现:

use App\Models\Chapter; // 假设模型类为Chapter,对应chapters表

$results = Chapter::select('id', 'file_id', 'server', 'chapter', 'data')
    ->where('server', 'sg')
    ->whereNotIn('chapter', function ($query) {
        $query->select('chapter')
            ->from('chapters as c2')
            ->where('server', 'hk')
            ->whereColumn('c2.file_id', 'chapters.file_id');
    })
    ->get();

二、大数据量查询优化建议

针对10万+数据的卡顿问题,原SQL的NOT IN子查询在数据量大时性能较差,建议改用左连接+空值判断的方式,同时添加索引提升效率:

1. 优化后的Eloquent写法

$results = Chapter::select('c1.id', 'c1.file_id', 'c1.server', 'c1.chapter', 'c1.data')
    ->from('chapters as c1')
    ->leftJoin('chapters as c2', function ($join) {
        $join->on('c1.file_id', '=', 'c2.file_id')
             ->where('c2.server', 'hk');
    })
    ->where('c1.server', 'sg')
    ->whereNull('c2.chapter')
    ->get();

2. 添加索引

在chapters表上创建复合索引,大幅提升查询速度:

CREATE INDEX idx_chapters_server_file_id ON chapters(server, file_id);
CREATE INDEX idx_chapters_server_file_id_chapter ON chapters(server, file_id, chapter);

内容的提问来源于stack exchange,提问作者ThuMinh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:05:55