Php laravel分页的查询优化
我正在使用laravel分页。我是laravel的新手,我有以下查询从job表中获取记录,job表绑定到site表,job表中有300k记录,site表中有10k记录。我还设置了索引以获得更快的结果。当以限制0,10获取数据时,需要0.000秒,但以限制29990,0获取数据时,需要的时间太多时间为了解决这个问题,我将查询从Query1改为Query2 问题1: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.
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
这是非常常见的,您的分页将发生变化是的,我知道原因,但另一种方式是什么?