连接用户定义的表类型参数以查看

时间:2019-11-16 00:42:38

标签: sql-server tsql join view temp-tables

SQL Server 2012:我有一个存储过程,其参数为用户定义的表类型。

要创建其返回行集,存储过程将从连接到param表的视图中的几列中选择,这些列都不具有索引(由于其他原因,这很难添加)。

最好:

  1. 将整个视图加载到本地临时表中,然后针对临时表和参数表的联接进行选择
  2. 直接从连接到参数表的视图中选择

该视图最多可包含约100万行。

这两种方式都有优势吗?还是SQL Server以类似的方式在内部实现这两种方法?

1 个答案:

答案 0 :(得分:1)

我将从创建临时表开始,在其中插入用户定义的表类型。定义的表类型实际上是一个表变量,在某些情况下将表变量与其他对象连接非常慢,因为SQL引擎无法很好地了解该表变量有多少行。

可以优化的第二件事是视图。这里的问题是:

  1. 您真的需要查看吗?使用内联表值函数(也称为带参数的视图)会更好吗?如果您可以向该函数传递一些参数,这些参数可用于高级过滤数据(想象不返回所有行而是其中的一部分),那么您也可以提高性能。
  2. 如果您确实需要查看这些数据,可以查看indexed吗?
相关问题