性能变差和一个方案"/>
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了
更多推荐
mysql union性能变差和一个方案
发布评论