[解决]想了好久,这种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 下的内容就是你实际内容就可以了。
直接用DB不香么?
超过2个表我都是写原生的sql
同一个表还做结果集 确定逻辑没问题?
Eloquent不是自带分页吗
表数据多少啊,就要优化分页
@imstone 同一个表目的是limit千万级分页不卡机。
@一个人的江湖 没多少,200多万,只接主键limit分页,后面会卡。
不要这么用 limit n,size . n 很大肯定会有问题
使用where做分页啊,User::query()->where('id','>',x)->take(10)->get();
解决
limit
效率低的问题,有更简单的方式,用where 主键 + limit
,每次都记录上次最后的id,然后where > 或 < id limit 20
我截图的时候给数据表替换了,你的limit 才5万多,对比没那么明显。
groupby()后按倒叙取最新一条数据,用 Eloquent 能否实现?