SQL一个自定义表函数。
用Select 进行查询,group by 分组,SQL大致如下:
select sdorgname,sum(digit) from fn_[freeperiodmatstledger_single]() group by sdorgname
执行速度很慢,查看实际执行计划,78%都耗在对sdorgname排序上了,而我代码中(包含函数中的代码)都没有任何排序,没有Order by或Merge join这些东西,返回的实际结果却是排过序的,耗了这么多资源,这是怎么回事?函数到底是怎么执行的?
用Select 进行查询,group by 分组,SQL大致如下:
select sdorgname,sum(digit) from fn_[freeperiodmatstledger_single]() group by sdorgname
执行速度很慢,查看实际执行计划,78%都耗在对sdorgname排序上了,而我代码中(包含函数中的代码)都没有任何排序,没有Order by或Merge join这些东西,返回的实际结果却是排过序的,耗了这么多资源,这是怎么回事?函数到底是怎么执行的?
的结果是按照sdorgname进行排序.建议你对sdorgname建立索引再试试.
select sdorgname,sum(digit) from #tmp
group by sdorgnamedrop table #tmp
从函数里边查询结果要怎么建索引啊?
我对函数内表的sdorgname字段建立聚集索引,结果还是一样的啊。
先将函数结果全部插入到临时表再分组不太好,因为函数返回的数据太多了,插入临时表速度很很慢,何况还要再查询一次 效率还不如直接查让它排序快了
函数执行时,将返回的结果集写入至一个临时表。
再对函数进行查询时,其实就是对这个临时表进行查询。
不能对这个临时表创建索引。
更不清楚为什么会自动排序,sum和group by 都不会干这勾当吧,觉得也没必要啊