【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
现在一个查询是差不多5表关联,其中3张表举个栗子,user表,card表,user_card表:
user表示8万数据,user_card表18万,card表10万,关联查询一个列表loading动画要25秒,用的是jpa,我写了原生的sql也差不多时间并没有快多少,像这种情况如何优化;
如果用缓存不可能存这么多数据在缓存中,因为不一定经常用,浪费内存;如果就存第一页数据那么添加新数据同步到缓存中,那么第二页数据怎么办?
有没有以前碰到同样问题的大神指教一下
这么慢怕是没有加索引
贴SQL和执行计划看看。这么少数据除非你执行了奇葩条件过滤,不然就是全表,单条也没这么糟糕。
减少join的表,如果速度变快,就说明是该处join造成了性能慢,以此来判断到底是哪里join出现性能问题。
减少查询条件,如果速度变快,则说明某个查询造成了性能变慢,以此判断字段的查询性能问题。
10多万数据的表,仅仅用索引就能优化性能,用不着用缓存来解决。
你有5张表,且采用join关联,当然慢了,建议改进
因为用的jpa 所以这sql是jpa生成的
建议mobile字段加索引,然后模糊查询时,前置位的%号去掉.
我看不清楚你的执行计划。
不过从SQL分析,user2查询mobile全表扫描了吧。建议这里尝试换成ID或者非like,尝试检查一下速度。另外就是exists,这里也是一个重点。如果外键关联都有索引的情况下,出现问题也就是这两个地方比较可能了。
最后,你MySQL版本多少?老一点的,WHERE子查询据说能要命。
你自己写的sql 贴出来看看, 这个好像查询的是 某个手机号的 card status 为1的数量,当然也可能是一批手机号
这个sql 其实是在感觉自杀一样