SQL 连接与 SQL 子查询(性能)?

标签 sql performance sql-server-2008 subquery join

我想知道我是否有一个像这样的加入查询 -

Select E.Id,E.Name from Employee E join Dept D on E.DeptId=D.Id

和一个子查询类似的东西 -

Select E.Id,E.Name from Employee Where DeptId in (Select Id from Dept)

当我考虑性能时,两个查询中哪一个会更快,为什么

还有什么时候我应该选择其中一种而不是另一种?

抱歉,如果这太微不足道了,之前就问过,但我对此感到困惑。另外,如果你们能给我建议我应该用来衡量两个查询性能的工具,那就太好了。非常感谢!

最佳答案

嗯,我相信这是一个“古老但黄金”的问题。答案是:“这要看情况!”。 性能是一个如此微妙的主题,以至于说“永远不要使用子查询,总是加入”就太愚蠢了。 在以下链接中,您将找到一些我认为非常有帮助的基本最佳实践:

我有一个包含 50000 个元素的表,我要查找的结果是 739 个元素。

我最初的查询是这样的:

SELECT  p.id,
    p.fixedId,
    p.azienda_id,
    p.categoria_id,
    p.linea,
    p.tipo,
    p.nome
FROM prodotto p
WHERE p.azienda_id = 2699 AND p.anno = (
    SELECT MAX(p2.anno) 
    FROM prodotto p2 
    WHERE p2.fixedId = p.fixedId 
)

执行时间为 7.9 秒。

我最后的查询是这样的:

SELECT  p.id,
    p.fixedId,
    p.azienda_id,
    p.categoria_id,
    p.linea,
    p.tipo,
    p.nome
FROM prodotto p
WHERE p.azienda_id = 2699 AND (p.fixedId, p.anno) IN
(
    SELECT p2.fixedId, MAX(p2.anno)
    FROM prodotto p2
    WHERE p.azienda_id = p2.azienda_id
    GROUP BY p2.fixedId
)

花了 0.0256 秒

好 SQL,好。

关于SQL 连接与 SQL 子查询(性能)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856164/

相关文章:

c++ - 将可选参数传递给方法而不是计算它的成本

python numpy 掩码意味着性能

sql-server - 如何将 dd/mm/yy 转换为日期数据类型

sql-server-2008 - 在 SQL Server 2008 数据库上附加 SQL Server 2008 R2 mdf 文件

sql - SQL Server 是否有与 Oracle 的 PL/SQL 包等效的包?

android - SQL 数据库中未添加数据

c# - 如何在任何 PC 上使用带有数据库的 C# 应用程序

java - 如何通过分页从服务器获取更新的记录(就位置而言)

mysql - MS SQL Server 中的比较运算符

performance - 有创意的数字猜谜游戏