相关疑难解决方法(0)

查询计划优化器是否适用于已连接/已过滤的表值函数?

在SQLSERVER 2005中,我使用表值函数作为从大表(传递日期范围或此类参数)对子集数据执行任意聚合的便捷方式.

我在大型查询中使用这些作为联合计算,我想知道查询计划优化器是否在每种情况下都能很好地与它们配合使用,或者我是否更好地在我的大型查询中取消这样的计算.

  1. 如果有意义,查询计划优化器是否会删除表值函数?
  2. 如果没有,你建议什么,以避免手动取消它们会发生代码重复?
  3. 如果是,您如何从执行计划中识别出来?

代码示例:

create table dbo.customers (
    [key] uniqueidentifier
    , constraint pk_dbo_customers
        primary key ([key])
)
go

/* assume large amount of data */
create table dbo.point_of_sales (
    [key] uniqueidentifier
    , customer_key uniqueidentifier
    , constraint pk_dbo_point_of_sales
        primary key ([key])
)
go

create table dbo.product_ranges (
    [key] uniqueidentifier
    , constraint pk_dbo_product_ranges
        primary key ([key])
)
go

create table dbo.products (
    [key] uniqueidentifier
    , product_range_key uniqueidentifier
    , release_date datetime
    , constraint pk_dbo_products 
        primary key ([key])
    , constraint fk_dbo_products_product_range_key …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005 query-optimization user-defined-functions

2
推荐指数
1
解决办法
1746
查看次数