Php laravel分页的查询优化

Php laravel分页的查询优化,php,mysql,laravel,Php,Mysql,Laravel,我正在使用laravel分页。我是laravel的新手,我有以下查询从job表中获取记录,job表绑定到site表,job表中有300k记录,site表中有10k记录。我还设置了索引以获得更快的结果。当以限制0,10获取数据时,需要0.000秒,但以限制29990,0获取数据时,需要的时间太多时间为了解决这个问题,我将查询从Query1改为Query2 问题1: SELECT s.site_name, s.postcode, j.contarct_code, j.job_num, s.

我正在使用laravel分页。我是laravel的新手,我有以下查询从job表中获取记录,job表绑定到site表,job表中有300k记录,site表中有10k记录。我还设置了索引以获得更快的结果。当以限制0,10获取数据时,需要0.000秒,但以限制29990,0获取数据时,需要的时间太多时间为了解决这个问题,我将查询从Query1改为Query2

问题1:

SELECT 
    s.site_name, s.postcode, j.contarct_code, j.job_num, s.site_id 
FROM 
    to_jobs as j 
LEFT JOIN  
    to_sites as s ON j.fk_site_id = s.site_id  
LIMIT  
    299970, 10
问题2:

SELECT 
    s.site_name, s.postcode, j.contarct_code, j.job_num, s.site_id 
FROM 
    to_jobs as j 
LEFT JOIN  
    to_sites as s  ON j.fk_site_id = s.site_id  
WHERE
    j.rec_id > 299970  
LIMIT  
    10
我得到了预期的结果,但当我将查询放入laravel分页时,它给出了错误的记录总数

查询1带有laravel代码:

->select('s.site_name','s.postcode','j.contarct_code','j.job_num','j.rec_id','s.site_id')
->leftJoin('to_sites as s', 'j.fk_site_id', '=', 's.site_id')
->paginate(10);
->select('s.site_name','s.postcode','j.contarct_code','j.job_num','j.rec_id','s.site_id')
->leftJoin('to_sites as s', 'j.fk_site_id', '=', 's.site_id')
->where('j.rec_id', '>', '1067512')
->paginate(10);
总计=29997

查询2,带有laravel代码:

->select('s.site_name','s.postcode','j.contarct_code','j.job_num','j.rec_id','s.site_id')
->leftJoin('to_sites as s', 'j.fk_site_id', '=', 's.site_id')
->paginate(10);
->select('s.site_name','s.postcode','j.contarct_code','j.job_num','j.rec_id','s.site_id')
->leftJoin('to_sites as s', 'j.fk_site_id', '=', 's.site_id')
->where('j.rec_id', '>', '1067512')
->paginate(10);
总数=49


数据获取时间问题已解决,但分页记录已更改。有没有其他解决方案?

当你添加
where('j.rec_id','>','1067512')
这个平均计数查询得到的数据很少,因为你会跳过这个
id<1067512
非常常见的数据,你的分页会改变是的,我知道原因,但另一种方式是什么?当你添加
where('j.rec id','>','1067512'))
此平均计数查询获得的数据很少,因为可能会跳过此数据,而
id<1067512
这是非常常见的,您的分页将发生变化是的,我知道原因,但另一种方式是什么?