[解决]想了好久,这种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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 10

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

3天前 评论

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

3天前 评论

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

2天前 评论

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

2天前 评论

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

2天前 评论

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

2天前 评论

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

1天前 评论

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

1天前 评论

file

file

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

1天前 评论

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