查看 vs 表值函数 vs 子查询

Posted

技术标签:

【中文标题】查看 vs 表值函数 vs 子查询【英文标题】:View vs TableValued Function vs SubQuery 【发布时间】:2014-08-22 10:14:05 【问题描述】:

我有一个需要的场景

    加入 3 个表 以获取 一个字段 的值 第二个字段加入 4 个表格 用于第三个字段连接3 个表

以上所有连接都是内部的 如果数据存在,我的字段的值为“Y”,否则为“N”

to achieve this which method gives best performance
    创建一个表值函数,我可以使用它加入并检查是否为空,然后为“N”,否则为“Y” 创建一个视图而不是表值函数并与之连接 编写子查询并结合子查询使用。

这会更快...这将在大数据上执行。因此性能是主要因素。

-谢谢

【问题讨论】:

【参考方案1】:

函数是邪恶的。

另一方面,视图和子查询之间的差异几乎不会引起注意 - 当然,只要查询完全相同。不过,视图可能不太灵活。

【讨论】:

‘功能是邪恶的’ 过于笼统。内嵌 TVF 对优化器非常友好,非常好用。 @AndriyM,内联是唯一的例外。但是关于性能,就像这个问题的主题一样,我怀疑它们会击败视图或子查询。它们有其用途,但在性能方面,它们是最糟糕的选择。

以上是关于查看 vs 表值函数 vs 子查询的主要内容,如果未能解决你的问题,请参考以下文章

子查询 X 临时表 X 动态 sql X 表值函数

SQL Server:IN 子查询的选择 vs 值性能

如何在分层查询内的相关子查询中传递外部表值

如何减少许多相似的相关子查询?

MongoDB:使用子代数组填充父代vs通过父代ID搜索子代

SQLserver 怎么把查出的字符串结果作为子查询条件