交叉应用与内连接:大型数据集的性能优化
在处理复杂的表关系或使用内连接不易实现的操作时,交叉应用被证明特别有用。 它从右侧表中为左侧表中的每一行生成行。
虽然交叉应用和内连接都可以产生类似的结果,但交叉应用通常表现出卓越的效率,特别是在处理大量数据集并采用分区或分页时。
交叉应用的一个关键优势是它能够在没有用户定义函数 (UDF) 作为右侧表的情况下运行,从而在各种情况下提供灵活性。
为了突出性能差异,让我们检查一个包含 2000 万条记录的“主”表的场景。 内部联接查询检索较小“t”表中每条记录的最后三行大约需要 30 秒:
<code class="language-sql">WITH q AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS rn FROM master ), t AS ( SELECT 1 AS id UNION ALL SELECT 2 ) SELECT * FROM t JOIN q ON q.rn <= t.id</code>
但是,等效的交叉应用查询几乎立即完成:
<code class="language-sql">WITH t AS ( SELECT 1 AS id UNION ALL SELECT 2 ) SELECT * FROM t CROSS APPLY ( SELECT TOP (t.id) m.* FROM master m ORDER BY id ) q</code>
这种巨大的性能差异强调了在处理大型数据集中的复杂数据操作时交叉应用的效率优势。
以上是交叉应用与内连接:交叉应用何时为大型数据集提供卓越的效率?的详细内容。更多信息请关注PHP中文网其他相关文章!