[解决]想了好久,这种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

4年前 评论

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

4年前 评论

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

4年前 评论

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

4年前 评论

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

4年前 评论

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

4年前 评论

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

4年前 评论

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

4年前 评论

file

file

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

4年前 评论
zhanghaidi

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

4年前 评论
jiangehenpi 1年前