sql需要高性能的多态内联表值函数

时间:2017-05-11 00:09:58

标签: sql performance polymorphism

我需要以某种形式或形式在sql中实现高性能的多态内联表值函数。

我目前的做法如下。它表现不佳。在我的实际代码中,我有大约50-100种不同的类型。

create table things (
    id int identity primary key,
    typecode int
)

create function foo_type1()
returns table
as return
    select id, v = 'blah1' 
    from things

create function foo_type2()
returns table
as return
    select id, v = 'blah2' 
    from things

create function foo_type3()
returns table
as return
    select id, v = 'blah3' 
    from things


create function foo_poly()
return table
as return    
select
    f.*
from things t
join (
    select typecode=1, * from foo_type1()
    union all select typecode=2, * from foo_type2()
    union all select typecode=3, * from foo_type3()
) f on f.typecode = t.typecode

我的典型查询是针对一小部分行,例如

select * from foo_poly() where id in (123, 912, 2312)
select * from foo_poly() where id = 123

我的things表有大约250万(小)行。

我的实际值(v列)比选择常量更复杂,必须动态计算。

选择查询过长(约10秒)。

我尝试了很多东西(左连接+合并更糟糕)但是我没有想法。

0 个答案:

没有答案