Sql server 交叉应用是否使用逐行处理?

Sql server 交叉应用是否使用逐行处理?,sql-server,performance,tsql,Sql Server,Performance,Tsql,我一直认为交叉应用是进行内部连接的另一种方式。我不得不重新编写一堆代码,因为我的SR.确信交叉应用程序不受ansi支持,并且还使用逐行处理 我知道内部连接更直观。我也明白,如果可以通过内部连接完成相同的事情,我不应该使用交叉应用。只是有时候我会在内部连接之前尝试交叉应用。我已经查看了IO统计数据,在这些情况下,我可以将交叉应用切换到内部连接,它们没有区别 我的问题是: 1.交叉应用是否使用逐行处理? 2.交叉应用程序是否应被视为游标的应用程序?(即性能猪) 3.是否支持交叉应用ansi 4.关于

我一直认为交叉应用是进行内部连接的另一种方式。我不得不重新编写一堆代码,因为我的SR.确信交叉应用程序不受ansi支持,并且还使用逐行处理

我知道内部连接更直观。我也明白,如果可以通过内部连接完成相同的事情,我不应该使用交叉应用。只是有时候我会在内部连接之前尝试交叉应用。我已经查看了IO统计数据,在这些情况下,我可以将交叉应用切换到内部连接,它们没有区别

我的问题是:
1.交叉应用是否使用逐行处理? 2.交叉应用程序是否应被视为游标的应用程序?(即性能猪)
3.是否支持交叉应用ansi
4.关于何时使用和避免交叉应用,现实生活中最好的例子是什么

  • 交叉应用是否使用逐行处理
  • 有时候。许多正则联接也是如此。取决于查询。在SSMS中显示实际的查询计划,您可以看到它在做什么。您经常会看到,
    交叉应用
    和等效的传统联接使用相同的查询计划。有时交叉应用
    会更快。有时连接会更快。取决于数据、索引、统计数据等

  • 交叉应用程序是否应被视为游标的应用程序?(即性能猪)
  • 不,它们不像游标。如果查询优化器未对其进行优化,则它们类似于
    循环联接
    。但他们可能是表演狂。就像其他任何查询一样

  • 是否支持交叉应用ansi
  • 我不这么认为,但我不确定

  • 关于何时使用和避免交叉应用,现实生活中最好的例子是什么
  • 如果你有一个查询在查询的外部部分返回很多行,你可以考虑加入子查询,而不是使用<代码>交叉应用< /C> >,预测SQL Server将在两个查询上执行<代码>哈希连接< /代码>。但是,如果SQL Server执行

    循环联接
    ,您可能会得到与
    交叉应用
    相同的查询计划。如果您有一个外部行数很少的查询,并且希望仅根据这些行数在另一个表中查找值,那么您可能会倾向于使用
    交叉应用
    ,尽管SQL Server可能会为您选择
    循环联接

    一般来说,除非有充分的理由,否则不应该使用连接提示。类似地,我不会为使用
    交叉应用
    与仅基于性能的子查询连接而烦恼。选择在获取数据时最有意义的方法,让SQL Server找出执行数据的最佳方法。如果某个特定查询的运行速度较慢,则考虑将其更改为其他方法或提供连接提示

  • 交叉应用是否使用逐行处理
  • 有时候。许多正则联接也是如此。取决于查询。在SSMS中显示实际的查询计划,您可以看到它在做什么。您经常会看到,
    交叉应用
    和等效的传统联接使用相同的查询计划。有时交叉应用
    会更快。有时连接会更快。取决于数据、索引、统计数据等

  • 交叉应用程序是否应被视为游标的应用程序?(即性能猪)
  • 不,它们不像游标。如果查询优化器未对其进行优化,则它们类似于
    循环联接
    。但他们可能是表演狂。就像其他任何查询一样

  • 是否支持交叉应用ansi
  • 我不这么认为,但我不确定

  • 关于何时使用和避免交叉应用,现实生活中最好的例子是什么
  • 如果你有一个查询在查询的外部部分返回很多行,你可以考虑加入子查询,而不是使用<代码>交叉应用< /C> >,预测SQL Server将在两个查询上执行<代码>哈希连接< /代码>。但是,如果SQL Server执行

    循环联接
    ,您可能会得到与
    交叉应用
    相同的查询计划。如果您有一个外部行数很少的查询,并且希望仅根据这些行数在另一个表中查找值,那么您可能会倾向于使用
    交叉应用
    ,尽管SQL Server可能会为您选择
    循环联接


    一般来说,除非有充分的理由,否则不应该使用连接提示。类似地,我不会为使用
    交叉应用
    与仅基于性能的子查询连接而烦恼。选择在获取数据时最有意义的方法,让SQL Server找出执行数据的最佳方法。如果某个查询运行缓慢,请考虑将其更改为其他方法或提供连接提示。

    在交叉应用中,函数会被反复调用,每行调用一次。。。您可能会读到:
    CROSS-APPLY
    是Microsoft标准
    横向联接的语法。因此,这个概念在标准中,但是MS在它以自己的语法进入标准之前就实现了它。。。您可能会读到:
    CROSS-APPLY
    是Microsoft标准
    横向联接的语法。因此,这个概念在标准中,但是MS在它以自己的语法进入标准之前实现了它。