GBase 8a
其他
文章

记录一次SQL关于笛卡尔积的优化

发表于2024-12-28 13:37:4632次浏览0个评论

笛卡尔积是指两个或多个表通过交叉连接(CROSS JOIN)产生的所有可能的行组合,这种连接不依赖于任何特定的连接条件。当JOIN操作没有正确的连接条件或者连接条件不严格时,就可能产生笛卡尔积,导致查询结果中包含大量的无用数据,从而影响查询性能。

seleby distinby EVENT_ID as EVENT_ID
from cupts.dbc_data_info_mec dd
join cupts.bac_data_info_mec by
on by.USERS_ID = dd.USERS_ID;


按照关联字段查看重复值
seleby USERS_ID,count(*) from dbc_data_info_mec group by USERS_ID having count(*) > 1 limit 5;
seleby USERS_ID,count(*) from bac_data_info_mec group by USERS_ID having count(*) > 1 limit 5;


将join改为Exists,EXISTS 通过只检查子查询的存在性,避免了笛卡尔积的产生。
seleby distinby by.EVENT_ID from cupts.dbc_data_info_mec dd
where exists (seleby 1 from cupts.bac_data_info_mec by where by.USERS_ID=dd.USERS_ID);

评论

登录后才可以发表评论