问答 / 1 / 24 / 创建于 2年前 / 更新于 2年前
朋友的项目可能数据量过大,然后超时了,有优化空间么。
可以考虑一下 lazy 或者 chunk
explain,或者拆分 SQL,分表都可以,需要根据业务自己判定
为啥连分页都没
AntsScore::query() ->where() ->with(['user:username,id','num:user_id,id']) ->withCount('num') ->get() ->toArray();
可以说下你这不分页get一次性拿多少数据嘛
@working
先查出问题, 3w 估计才 1s,不可能超时。
3w
1s
转原生 sql,确实是否是 sql 层
sql
很大概率是模型层
一次性拿,数据太多,始终会卡的。,如果是实时处理的话,分页慢慢的把数据拿出去组合起来。如果是有树层级的,可以层级数据异步拿取
使用chunk分块查询,试试能行不
chunk + cursor 可以尝试下
chunk
cursor
如果找不到数据,toArray() 会出错的
get过 再toarray其实是不会报错的,但是没有必要toarray 因为get也可以foreach
那些方法 我感觉都不如 直接在这个题目表 加个 答题次数的字段 一劳永逸 要不然count 总是慢的 越多越慢
答题一次 就+1 就好了 原有的数据兼容可以用Artisan命令统计赋值到新字段。
数据库加索引,不要一次性全查,分段异步查,用原生查询语句
可考虑下冗余字段。建议db操作尽量只简单查询,后期系统扩展会很容易。
我要举报该,理由是:
推荐文章: