Advertisement

MySQL学习笔记什么时候涉及笛卡尔积

阅读量:

在学习MySQL表连接相关知识时,笛卡尔积是一个需要重点掌握的概念。当两个表之间没有设置任何限制条件进行连接时,必然会产生笛卡尔积现象。

笛卡尔积
若表1包含m行a列,而表2包含n行b列,在无条件连接的情况下,系统会将两个表中的所有行进行两两组合,最终生成的新表将拥有m*n行以及a+b列。当其中任意一张表的记录数量较大时,这种组合方式会导致生成的表格体积极为庞大,从而显著降低查询效率。因此,在数据库操作过程中应当尽量避免此类情况的发生。
在Hive的严格模式下,也对笛卡尔积的出现进行了明确限制。

在此总结了可能导致笛卡尔积产生的几种情形,并建议在实际查询中加以规避。

首先提出一个问题:常见的左连接查询是否可能产生笛卡尔积?换一种表述方式:在左连接中以左表为基准,若左表包含m条记录,则最终的结果集是否一定能够得到m条记录?答案是不确定的,这意味着左连接查询在某些情况下也可能导致笛卡尔积的出现。

以下是结论:
在执行连接查询时,若所使用的on条件字段不具备唯一性,则可能出现局部笛卡尔积;反之,若on条件字段具有唯一性,则不会引发笛卡尔积现象。

具体证明过程如下:
此验证需要用到三张表格:student、score、class。其中student表中的sno字段具有唯一性;score表则不存在唯一字段;class表中的classID字段为

全部评论 (0)

还没有任何评论哟~