LeftJoin跟InnerJoin的一些研究

JOIN类型性能对比
通过不同规模数据量的实验,对比了INNER JOIN与LEFT JOIN在数据库查询效率上的差异。结果显示,在从表链接字段数据量较少时LEFT JOIN更高效,反之则INNER JOIN表现更优。
使用innerjoin时查询5次每次所用时间: 1780,1873,2020,1960,2093
使用leftjoin时查询5次每次所用时间: 1076,1216,993,940,1013
主表数据量:140066
从表数据量:130306
测试方式:清理缓存后循环10000次查询并计算总时长
备注:从表共97个工单,查询结果2工单






使用innerjoin时查询5次每次所用时间: 54590,39936,29940,27780,28186
使用leftjoin时查询5次每次所用时间: 35476,37263,35986,36110,34183
主表数据量:239843
从表数据量:230083
测试方式:清理缓存后循环10000次查询并计算总时长
备注:从表共99874个工单,查询结果99782




结论:从表链接用字段数据量少时,leftjoin有着更高的效率;当从表链接用字段数据量多时,innerjoin有着更高的效率。
### ClickHouse 中 LEFT JOIN 的用法与示例 在 ClickHouse 数据库中,`LEFT JOIN` 是一种常见的连接操作方式。它用于返回左中的所有记录以及右中满足条件的匹配记录;如果右中不存在匹配项,则对应字段会填充为 `NULL`。 以下是有关 `LEFT JOIN` 的具体说明及其使用方法: #### 1. 左连接的基础定义 当执行 `LEFT JOIN` 操作时,ClickHouse 将尝试基于指定的键来匹配两个中的行。对于左中的每一行,如果没有找到右中的匹配行,则结果集中该行对应的右部分会被设置为 `NULL`[^4]。 #### 2. 使用场景 通常情况下,`LEFT JOIN` 被用来处理一对关系的数据集。例如,在分析用户行为数据时,可能需要将用户的个人信息(存储在一个单独的维度中)附加到他们的活动日志上。 #### 3. SQL 查询结构 标准的 `LEFT JOIN` 结构如下所示: ```sql SELECT t1.column1, t1.column2, t2.columnA, t2.columnB FROM table_1 AS t1 LEFT JOIN table_2 AS t2 ON t1.key = t2.foreignKey; ``` 在这个例子中,我们假设存在两张格——`table_1` 和 `table_2`,并通过共同的关键字 (`key`) 进行关联查询。 #### 4. 实际案例演示 下面提供了一个具体的实例展示如何运用 `LEFT JOIN` 来获取所需的结果: 假设有两份资料分别代订单详情(`orders`) 及客户信息(`customers`) 如下: | OrderID | CustomerID | |---------|------------| | O001 | C001 | | O002 | NULL | | CustomerID | Name | |-----------|----------| | C001 | Alice | | C002 | Bob | 通过运行以下命令可以获得完整的列即使某些顾客尚未下单也显示出来。 ```sql SELECT o.OrderID, c.Name AS CustomerName FROM orders AS o LEFT JOIN customers AS c ON o.CustomerID = c.CustomerID; ``` 最终得到这样的输出结果: | OrderID | CustomerName | |---------|--------------| | O001 | Alice | | O002 | NULL | 上述情况明第二笔交易由于缺乏有效的客户编号所以无法映射至任何实际存在的消费者身上因而呈现为空白状态即`NULL`. #### 5. 特殊注意事项 需要注意的是,尽管 `ASOF JOIN` 提供了一种特殊的时间序列近似匹配机制[^2] ,但它并不适用于所有的业务需求。相比之下,传统的等值联接如 `INNER/LEFT/RIGHT/FULL OUTER JOIN` 更加通用且易于理解。 另外值得注意的一点在于,假如所使用的列名不一致或者根本就找不到相应配对项目的话,那么系统将会触发错误提示告知使用者存在问题所在位置以便及时修正代码逻辑上的偏差[^1]. 最后不得不提一下递归公用达式(Recursive Common Table Expressions),虽然其主要应用于解决复杂嵌套型别的难题比如家族谱系追踪等问题之上[^3],但对于构建动态SQL语句或是实现分页功能同样大有裨益值得深入研究学习一番.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值