mysql union性能变差和一个方案

前几天,搞了一个140M大小的表格,装在本机上。主键没定义,但是默认是INDOOB,肯定是有主索引的。

有一个业务逻辑,想要查两个表(比如把男生一个表,女生一个表,查询班里的学生)
由于mysql不支持outer join,只能用unoin。

然后查询(请原谅我喜欢给表起名t1):

select * from t1;

速度很快。0.4秒。

然后我用了union命令。

select * from t1
union
select * from t1;

2秒。

由于我使用的是dbeaver,所以默认是有limit 200的(dbeaver是真的NP)。当执行读取全数据的时候,直接卡死。

然后上网一查:union要进行一次去重的操作。

我这个表大概50W条数据,而且不重复。所以系统每插入一条数据,就要走全表查一次索引,50W条数据就要查50W次,当然卡死。

提出建议:使用union all。这样就不会走去重的逻辑了。

测试:问题解决。

但是重复数据咋办?????
这个东西似乎只能在建表的时候确定。比如一个男生表一个女生表,直接union all和union结果没有任何问题。但是如果有重复数据……
我想了想,去重不就得走全表索引吗……要是真的这样的话,应该去找DBA了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值