[解决]想了好久,这种SQL用 Eloquent 如何写?

SELECT t1.* FROM items t1, (SELECT id FROM items WHERE status=1 LIMIT 57140,10 ) t2 WHERE t1.id=t2.id;

我的目的是为了优化分页性能。

问题已经解决了。
至于怎么解决的,肯定 Eloquent 解决的,下面有人说,多少数据就这么搞,那是你数据量少没体验过,

就简单的 SELECT id FROM items WHERE status=1 LIMIT 57140,10 这个语句,select * 和 select id 结果的响应速度相差90多倍。是有优化的必要的。

下面回复的哥们可以提供有用的解决方案,冷嘲热讽没意思的。

我得解决方案很简单,用 hasOne 自己关联自己。
Item::with('sf')->select('id')->orderByDesc('id')->paginate(10);
查询的时候在预加载自己。
这样千万级分页和几百条的性能是一样的。
你输出的时候只输出 sf 下的内容就是你实际内容就可以了。

sql
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

超过2个表我都是写原生的sql

3年前 评论

同一个表还做结果集 确定逻辑没问题?
Eloquent不是自带分页吗

3年前 评论

表数据多少啊,就要优化分页

3年前 评论

@imstone 同一个表目的是limit千万级分页不卡机。

3年前 评论

@一个人的江湖 没多少,200多万,只接主键limit分页,后面会卡。

3年前 评论

不要这么用 limit n,size . n 很大肯定会有问题

3年前 评论

使用where做分页啊,User::query()->where('id','>',x)->take(10)->get();

3年前 评论

解决limit效率低的问题,有更简单的方式,用where 主键 + limit,每次都记录上次最后的id,然后where > 或 < id limit 20

3年前 评论

file

file

我截图的时候给数据表替换了,你的limit 才5万多,对比没那么明显。

3年前 评论
zhanghaidi

groupby()后按倒叙取最新一条数据,用 Eloquent 能否实现?

3年前 评论
jiangehenpi 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!