表值函数是不是会像视图一样被数据库引擎优化?

Posted

技术标签:

【中文标题】表值函数是不是会像视图一样被数据库引擎优化?【英文标题】:Will table-valued functions act like views, in being optimized by the database engine?表值函数是否会像视图一样被数据库引擎优化? 【发布时间】:2014-01-03 23:32:23 【问题描述】:

我只看到一条评论似乎可以解决这个问题,那就是内联函数和视图都被引擎扩展了。不知道这是否是我需要的。

我正在将 Qlikview 中的一些内容转换回 SQL Server,并尝试优化速度。

我将所有内容都放入表返回函数中,并使用视图作为 Qlikview 调用的最终对象,只是为了避免界面过于混乱。

我想知道我是否会因为使用这些功能而伤到自己的脚。几乎所有这些都是内联的,其中有几个是多语句。

所以,我想,我需要知道的是,如果一个视图由几个函数组成,引擎是否会根据最终的 where 子句对函数进行过滤,这样就不会从每个函数中提取所有内容,而是只有符合 where 语句的东西。我的意思是一路走来,而不是最后一刻。

【问题讨论】:

【参考方案1】:

内联函数的作用类似于参数化视图。查询处理器已经具有相关连接(源表引用外部列的连接)的功能,因为您已经可以使用CROSS APPLY 编写这些连接。加入内联 TVP 就像将 CROSS APPLY 写入查询优化器。

多值函数不会那样做。确保它们不会被太频繁地调用,并且不会因为没有将它们内联而丢失太多。他们不会从整体的优化器转换中受益。

【讨论】:

以上是关于表值函数是不是会像视图一样被数据库引擎优化?的主要内容,如果未能解决你的问题,请参考以下文章

在匹配子句中使用视图和表值函数作为节点或边表

sql2005中 表值函数是啥

sql2005中 表值函数是啥

clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化(代码

内联函数和视图之间的区别

表值函数查询不能保存为视图