技术和自动化的发展以及指数级的数据量已导致数据库的重要性和普遍性,简单来说,数据库是有组织的数据收集。考虑到一种幼稚的方法,理论上可以将所有数据保存在一个大表中,但是这会增加搜索记录的访问时间,主表被破坏时的安全性问题,信息的冗余存储等问题。因此,表被分解为多个较小的表。

为了从多个表中检索信息,我们需要使用称为join(内部联接,外部联接和最重要的自然联接)的操作从不同的记录中提取选定的数据。考虑具有n行的2个表架构的员工(employee_name,street,city)和具有m行的工作表(employee_name,branch_name,salary)。这两个表的笛卡尔积将创建一个具有n * m行的表。自然联接从这n * m行中选择employee_name具有相同值的所有行。为了避免信息丢失(员工中的某些元组在工作中没有相应的元组),使用左外部联接或右外部联接。

联接或嵌套查询最好满足以下条件:

  • 假设2个表存储在本地系统上。执行联接或嵌套查询几乎没有什么不同。现在让表跨分布式数据库存储。对于嵌套查询,我们仅从位于不同计算机上的每个表中提取相关信息,然后合并获得的元组以获得结果。对于联接,我们将需要从每个站点获取整个表并创建一个较大的表来进行过滤,因此将需要更多的时间。因此,对于分布式数据库,嵌套查询更好。

  • RDBMS优化器关注与程序员编写的子查询或联接有关的性能。联接被普遍理解,因此不会出现优化问题。如果需要跨平台的可移植性,请避免子查询,因为它可能会遇到错误(SQL服务器更擅长使用连接,因为它通常与使用连接的Microsoft图形查询编辑器一起使用)。

  • 特定于实现的:假设我们有一些嵌套查询是恒定的查询。在MySQL中,每个常量子查询都会被评估多次,而没有缓存功能。如果常量子查询涉及大元组,则这是一个明显的问题。子查询返回一组数据。联接返回必须建立索引的数据集。处理索引数据的速度更快,因此,如果子查询返回的数据集很大,则连接是一个更好的主意。

  • 子查询的执行时间可能比联接要长,具体取决于数据库优化器对待子查询的方式(可能转换为联接)。子查询比隐式连接更易于阅读,理解和评估。它们允许自下而上的方法,依次隔离并完成每个任务。

连接操作与嵌套查询

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:连接操作与嵌套查询
本文链接:https://www.vsdiffer.com/vs/join-operation-vs-nested-query.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。