连接操作 Vs DBMS 中的嵌套查询

原文:https://www . geesforgeks . org/join-operation-vs-nested-query-in-DBMS/

技术和自动化的发展,加上指数级的数据量,导致了数据库的重要性和无处不在,简单地说,就是有组织的数据集合。考虑到一种天真的方法,理论上可以将所有数据保存在一个大表中,但是这会增加搜索记录的访问时间、主表被破坏时的安全问题、信息的冗余存储以及其他问题。所以表被分解成多个更小的表。

为了从多个表中检索信息,我们需要从不同的记录中提取选定的数据,使用称为连接的操作(内部连接、外部连接以及最重要的自然连接)。考虑 2 个表模式,雇员(雇员名,街道,城市)有 n 行,工作(雇员名,分公司名,工资)有 m 行。这两个表的笛卡尔乘积创建了一个具有 nm 行的表。自然连接从这 nm 行中选择 employee_name 值相同的所有行。为了避免信息丢失(员工中的一些元组在工作中没有对应的元组),我们使用左外连接或右外连接。

连接或嵌套查询更符合条件:

  • 假设我们的两个表存储在一个本地系统上。执行联接或嵌套查询没有什么区别。现在让表跨分布式数据库存储。对于嵌套查询,我们只从位于不同计算机上的每个表中提取相关信息,然后合并获得的元组以获得结果。对于连接,我们需要从每个站点获取整个表,并创建一个大型表,从中进行筛选,因此需要更多的时间。所以对于分布式数据库,嵌套查询更好。
  • 关系数据库管理系统优化器关注与程序员编写的子查询或连接相关的性能。连接是普遍理解的,因此不会出现优化问题。如果需要跨多个平台的可移植性,请避免子查询,因为它可能会遇到错误(SQL server 更擅长使用联接,因为它通常与使用联接的微软图形查询编辑器一起使用)。
  • 实现特定:假设我们有一些嵌套查询是常量的查询。在 MySQL 中,每个常量子查询的计算次数与遇到的次数一样多,没有缓存功能。如果常量子查询涉及大型元组,这是一个明显的问题。子查询返回一组数据。联接返回一个必须被索引的数据集。处理索引数据更快,因此如果子查询返回的数据集很大,连接是更好的主意。
  • 子查询的执行时间可能比联接的执行时间长,这取决于数据库优化器如何处理它们(可能会转换为联接)。子查询比隐连接更容易阅读、理解和评估。它们允许自下而上的方法,隔离并按顺序完成每项任务。

参考–连接操作 Vs 嵌套查询