我需要以某种形式或形式在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秒)。
我尝试了很多东西(左连接+合并更糟糕)但是我没有想法。