Mysql查询需要大约25秒左右,如何优化

又一年夏天 发布于 2018/04/20 10:24
阅读 1K+
收藏 1

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

现在一个查询是差不多5表关联,其中3张表举个栗子,user表,card表,user_card表:

user表示8万数据,user_card表18万,card表10万,关联查询一个列表loading动画要25秒,用的是jpa,我写了原生的sql也差不多时间并没有快多少,像这种情况如何优化;

如果用缓存不可能存这么多数据在缓存中,因为不一定经常用,浪费内存;如果就存第一页数据那么添加新数据同步到缓存中,那么第二页数据怎么办?

有没有以前碰到同样问题的大神指教一下

加载中
0
开源中国首席弟子
开源中国首席弟子

这么慢怕是没有加索引

开源中国首席弟子
开源中国首席弟子
回复 @imindoor : EXPLAIN 加你的sql 看一下啊
又一年夏天
又一年夏天
加了
开源中国首席弟子
开源中国首席弟子
才这么一点数据
0
魔力猫
魔力猫

贴SQL和执行计划看看。这么少数据除非你执行了奇葩条件过滤,不然就是全表,单条也没这么糟糕。

又一年夏天
又一年夏天
我贴图吧 文字数限制了
0
Nox
Nox

减少join的表,如果速度变快,就说明是该处join造成了性能慢,以此来判断到底是哪里join出现性能问题。

减少查询条件,如果速度变快,则说明某个查询造成了性能变慢,以此判断字段的查询性能问题。

10多万数据的表,仅仅用索引就能优化性能,用不着用缓存来解决。

0
hzajie
hzajie

你有5张表,且采用join关联,当然慢了,建议改进

魔力猫
魔力猫
没看到数据前不要轻易下结论。
Kevin_Zhan
Kevin_Zhan
如何改进?
0
又一年夏天
又一年夏天

因为用的jpa  所以这sql是jpa生成的

0
w
wtujedp

建议mobile字段加索引,然后模糊查询时,前置位的%号去掉.

w
wtujedp
回复 @imindoor : 先查出原因,需求先放一边
w
wtujedp
回复 @imindoor : 你尝试一下,把前置的%去掉,然后再看看速度和执行计划
又一年夏天
又一年夏天
也加了 like是需求没法变
0
魔力猫
魔力猫

我看不清楚你的执行计划。

不过从SQL分析,user2查询mobile全表扫描了吧。建议这里尝试换成ID或者非like,尝试检查一下速度。另外就是exists,这里也是一个重点。如果外键关联都有索引的情况下,出现问题也就是这两个地方比较可能了。

最后,你MySQL版本多少?老一点的,WHERE子查询据说能要命。

魔力猫
魔力猫
回复 @imindoor : 我不是说不让你用模糊查询,而是先把模糊查询改成能用索引的,确认性能消耗是不是这里。5.6子查询比之前版本好了很多,exists结果集大吗?
又一年夏天
又一年夏天
模糊查询的条件有mobile所以没法变,mysql版本是5.6+的,因为用的jpa 所以这sql是jpa生成的 所以看上去有点奇怪
0
lazeyliu
lazeyliu

你自己写的sql 贴出来看看, 这个好像查询的是 某个手机号的  card status 为1的数量,当然也可能是一批手机号

0
lazeyliu
lazeyliu

这个sql 其实是在感觉自杀一样

又一年夏天
又一年夏天
因为用的jpa 所以这sql是jpa生成的 所以看上去有点奇怪
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部