create table tmp(.........)
insert into tmp(...) select * from xxx(select a,b,c,d from yyy....)
select * from tmp
我们的财务系统取数很慢,我后台跟踪了语句,发现是先建个临时表,然后把取得到的数据插入。那问题来了,我发现整个语句瓶颈在insert into上面,总共select出256条数据,道理上插入应该很快啊,毕竟tmp没有建立任何约束。
我尝试这样取数,这时候速度飞快
select top 256 * from xxx(select a,b,c,d from yyy...)
这就奇怪了,难道insert语句的逻辑是,没insert一条记录,都要重新跑一次select?我看执行计划里也是先select后,在统一insert的吗?都是256条数据,为什么写top就会快呢?
附执行计划:
没有加top