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了

猜你喜欢

转载自blog.csdn.net/weixin_45642669/article/details/113847803