今天发现一个很有趣的问题.请看代码:
declare @i int select @i=1declare @l int select @l=dbo.GetSplitLength(@mbh,',') ---字符串分割长度while(@i<=@l)begin insert into #tmbTable(mbhid) select a.mbhid from dockconfig_mbhTable a where a.mbh=dbo.GetSplitOfIndex(@mbh,',',@i)select @i=@i+1end;
-----------------------------------------------
由于dockconfig_mbhTable 表中有上万条数据,执行起来效率低下.经过尝试分析功能的执行时间,发现效率是受函数影响,
但是单独进行函数dbo.GetSplitOfIndex 测试,效率又没有问题.于是稍微修改了下代码:
declare @i int select @i=1declare @l int select @l=dbo.GetSplitLength(@mbh,',')declare @v varchar(20)while(@i<=@l)begin select @v=dbo.GetSplitOfIndex(@mbh,',',@i)insert into #tmbTable(mbhid) select a.mbhid from dockconfig_mbhTable a where a.mbh=@v select @i=@i+1end;
居然…居然效率提高了好几千倍.记录下以后遇到该问题都在进行查询时进行变量申明分开使用函数.