gpt4 book ai didi

sql - 子查询与内连接 - 哪一个执行得更快?

转载 作者:行者123 更新时间:2023-12-02 08:51:12 26 4
gpt4 key购买 nike

我希望发这样的帖子没问题。

我使用 SQL 已经有一段时间了,工作中的人们一直在使用 2 种不同的方法来返回数据库中的相同数字或行。

例如:

SELECT Name
FROM
Employees
WHERE
DepartmentID IN (SELECT DepartmentID
FROM
Departments
WHERE
Department LIKE '%Engineering')

SELECT Employees.Name
FROM
Departments
INNER JOIN Employees
ON Departments.DepartmentID = Employees.DepartmentID
WHERE
Departments.Department LIKE '%Engineering'

两者返回相同的数据。人们一直告诉我使用子查询是最好的方法。

我的问题是这样的:这两个中哪个执行得更快?我的猜测是带有内部连接的,但我可能是错的。

谢谢。

最佳答案

在这种情况下,两者是等效的。但是,对于 INNER JOIN 的情况,如果选择了 1 个以上具有相同 DepartmentID 的部门,则该 DepartmentID 的员工将被多次返回。

SQL 是一种声明性语言,这意味着该语言不应该说明应该如何执行查询,而只说明应该找到什么结果。由 DMBS 决定如何执行它。

一个像样的 SQL 数据库可能会优化它们以执行相同或相似的操作。

要检查它们是否在执行相同的操作,请在查询上运行 EXPLAIN

如果它们有相同的步骤,显然它们将花费相同的时间来运行。否则,您将看到数据库以何种方式处理不同的情况。 DBMS 如何优化它取决于实现。所以最好的方法是使用EXPLAIN

注意:EXPLAIN 是一个 SQL 命令,就像 SELECT 等。参见 http://www.sql.org/sql-database/postgresql/manual/sql-explain.html .

假设它以相同的步骤执行,您编写它的方式将是您认为最清楚意图的方式。

关于sql - 子查询与内连接 - 哪一个执行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com