MySQL学习笔记:join速度特别慢引出的问题

今天整合数据时,出现关联速度超级慢的问题,过程如下:

创建临时表:

CREATE TABLE TMP1 AS SELECT ID,COUNT COUNT_1,AMNT AMNT_1 
FROM EXPORT_INFO WHERE S_ID=1;

CREATE TABLE TMP2 AS SELECT ID,COUNT COUNT_2,AMNT AMNT_2 
FROM EXPORT WHERE S_ID=2;

关联TMP1、TMP2,并建目标表TMP12:

CREATE TABLE TMP12 AS
SELECT A.ID,A.COUNT_1,A.AMNT_1,B.COUNT_2,B.AMNT_2 FROM
TMP1 A JOIN TMP2 B ON A.ID=B.ID


结果此步速度超级慢。。。。TMP1、TMP2两张表的记录在30w左右的样子,感觉也不是数据量的问题。

网上查了一些JOIN慢的原因,看到有加索引来提高查询速度的,意识到建的这TMP1、TMP2两张表,没有添加主键也没有索引,尝试对ID字段设置为主键后,再次关联

设置主键:

ALTER TABLE TMP1 ADD PRIMARY KEY(ID);
ALTER TABLE TMP2 ADD PRIMARY KEY(ID);

再次关联建表:

CREATE TABLE TMP12 AS
SELECT A.ID,A.COUNT_1,A.AMNT_1,B.COUNT_2,B.AMNT_2 FROM
TMP1 A JOIN TMP2 B ON A.ID=B.ID
运行时间:19.590s

原来是建表未添加主键,或者索引的问题,添加ID为主键时,ID字段也自动加为了索引字段,问题解决。


索引提供了高效访问数据的方法,加快了查询速度。如果没有索引时,查询语句会扫描表中所有记录。有索引的情况下能快速定位到待查询记录,来达到提高查询速度的效果。在这两张表数据量都为30w的情况下,ID字段不加索引的话查询速度不慢才怪。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值