首页 >数据库 >mysql教程 >何时应选择 CROSS APPLY 而不是 INNER JOIN 以获得最佳性能?

何时应选择 CROSS APPLY 而不是 INNER JOIN 以获得最佳性能?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-20 11:32:09391浏览

When Should You Choose CROSS APPLY Over INNER JOIN for Optimal Performance?

CROSS APPLY 与 INNER JOIN:CROSS APPLY 何时表现出色?

虽然 INNER JOIN 是大多数一对多关系的首选,但 CROSS APPLY 在特定情况下提供显着的性能优势。

CROSS APPLY 的主要优势:

INNER JOIN 不同,CROSS APPLY 不强制要求右侧表使用用户定义函数 (UDF)。在处理需要分区或分页的大型数据集时,这种看似微小的差异变得至关重要。

分区和分页方面的优势:

虽然使用 INNER JOINCROSS APPLY 的简单查询可能会产生类似的执行计划,但 CROSS APPLY 在需要分区或分页的大型数据集上表现出卓越的效率。 通过消除显式 JOIN 条件,它允许数据库优化器利用缓存的中间结果,从而加快查询执行速度。

示例:

以下查询举例说明了在对左侧表的每个行多次迭代右侧表时 CROSS APPLY 相对于 INNER JOIN 的优势:

<code class="language-sql">/* CROSS APPLY */
SELECT  t1.*, t2o.*
FROM    t1
CROSS APPLY
        (
        SELECT  TOP 3 *
        FROM    t2
        WHERE   t2.t1_id = t1.id
        ORDER BY
                t2.rank DESC
        ) t2o</code>

此查询有效地检索每个 t2 行的前三个 t1 记录。 使用 INNER JOIN 复制此功能将明显更加复杂且效率较低。

性能基准:

在 20,000,000 条记录的表上进行的测试显示出显着的差异:CROSS APPLY 几乎立即执行,而使用 CTE 和窗口函数的等效 INNER JOIN 查询大约需要 30 秒。

总结:

当显式

条件不可用或处理大型数据集的分区或分页时,CROSS APPLYJOIN 是最佳选择。 它在这些场景中的效率使其成为查询优化的宝贵工具。

以上是何时应选择 CROSS APPLY 而不是 INNER JOIN 以获得最佳性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn