《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
高认可度评论:
不使用数据库,直接发短信,把并发压力给到移动或者电信
不使用数据库,直接发短信,把并发压力给到移动或者电信
升配置,例如polardb 优化查询,看索引,看是否可以限制翻页
考虑下es?或者详细说下目前的表结构 以及搜索场景 不太明白现在是卡在哪里
优化业务逻辑和sql吧,才几十万数据对mysql只是洒洒水
你的看你的业务瓶颈是什么 就单说查询速度1秒, 加索引,索引是否失效,sql是否合理,慢查询日志查看, 多主多从,还是服务器io有问题。 也可上es ,redis
加索引,优化SQL
读写分离啊
放一下你的表结构和 SQL?
才几十万。。感觉 SQLite 都能查得很快
性能优化方向有很多
翻译:Laravel 8 性能优化自查清单
首先要找出是什么原因导致的?
数据才几十万而已 都是互联网中的毛毛雨 :joy:
laravel卡还是sql卡,不应该分开测测吗
表结构 不放 sql也不放 能解决了问题才怪
Talk is cheap.Show me your code
$order = Order::query() ->where('Deleted', false) ->where('StoreGuid', $this->currentStoreGuid) ->where('Guid', $guid)
几十万放redis里优先读redis . 或者mysql读写分离 读多写少场景
laravel层面io开销就先开个opcache
根据表结构,业务情况,用es关键字搜索,redis部分缓存,电商有时候是他奶的要显示各种数据关联/统计太深了,可以与后端集合加业务事件与redis缓存来减少数据库查询,因为还是有很多数据更新频率有那么高的,或者有更新的时候加入队列支更新缓存。对于那些数字,晚几秒显示影响没啥的
用阿里云数据库,或者其他云数据库,不要自己搭建。
那就上笨办法,主从数据库,你应该是读多,这样,当高负载到来时,你随机从不同的从库读取,这样会快。
另外,少关联表,关联表越多越慢。
再不行就分库分表,或者前面几位说的用es,也行。
办法太多了。
redis不推荐,因为数据太多,且改数据麻烦。
CREATE TABLE
orderitem
(Id
int NOT NULL AUTO_INCREMENT,OrderGuid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,CommodityGuid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,UpName
varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '菜品名称',Price
decimal(7,2) DEFAULT NULL,Quantity
int DEFAULT NULL,CustomerGuid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,EmployeeGuid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,CreateTime
datetime DEFAULT NULL,GroupKey
int DEFAULT NULL,Guid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,Deleted
bit(1) DEFAULT NULL,SpecificationGuid
varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,Seq
int NOT NULL DEFAULT '0' COMMENT '是否是加菜,0表示不是加菜 1,2,3等表示第一次加菜,第二次加菜等,-1,-2.-3表示店家第1次加菜第二次加菜等',AttributesGuids
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '属性的名称,逗号分隔',AttributesGuidJson
varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '属性guid的json数据',Description
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,Tax
decimal(12,3) NOT NULL DEFAULT '0.000' COMMENT '税',IsOrderPrint
tinyint NOT NULL DEFAULT '0' COMMENT '菜品是否送厨打印 1是 0否',package_ms
tinyint NOT NULL DEFAULT '0' COMMENT '套餐单个还是多个 0不是套餐 1单个套餐 2多个套餐', PRIMARY KEY (Id
), KEYCommodityGuid
(CommodityGuid
), KEYOrderGuid
(OrderGuid
) ) ENGINE=InnoDB AUTO_INCREMENT=842455 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;..
每条 sql 都 explain
explain吧 一个小建议 where 结果集少的可以放前面 (Oracle采用自下而上的顺序解析WHERE子句)
我觉得吧 如果是模型关联 他一定走的 wherein wherein的数据多了 一定会卡 可以考虑join 放弃部分的模型便利 join的效率 你这个关联下的子关联在分出两条语句 多次查询库 效率会更高一点
关联太多,还不如一条一条分开查询
@wxf666 贴一下你的代码我学习一下
几十万这么卡明显有问题,第一步先优化索引吧。