比如:
select * from (
select * from 主表 where 条件列=@用户输入的条件) a
left join 从表1 b on a.id1=b.id
left join 从表2 c on a.id1=c.id
....这样的话当用户选择出来的结果记录越少,速度越快
select * from (
select * from 主表 where 条件列=@用户输入的条件) a
left join 从表1 b on a.id1=b.id
left join 从表2 c on a.id1=c.id
....这样的话当用户选择出来的结果记录越少,速度越快
select * from storagemaster a,storagedetail b where a.resid=b.resid and a.resid='1100000707001'
select * from (select * from storagemaster where resid='1100000707001') a left join storagedetail b on a.resid=b.resid
用CTRL+L查看执行计划,为什么第一个的花费还比第二个小呢?
"索引优化向导",功能很强,保你满意
select
from 临时表a
join 其他表
join 其他表
。你执行的速度比楼上的快得多。这是我已经遇到过得问题。
综合很多试验得到的最好方法。
你可以试试!所以你得写成存储过程,因为无论怎么写连接得表太多,查询就会慢。
上述情况在实际业务中为ERP软件中从采购订单-->收货通知-->采购发票-->外购入库 的业务流程,在处理采购订单执行情况表时需要根据各表之间的关联,从采购订单关联到外购入库以反映订单的入库数量等等信息
当用户对采购订单即上述的A1表过滤,测试该表有一定记录量,分二种情况
10条,执行速度很快,花费几秒
1500条记录,L执行效率很低,花费很长时间,近几分钟
查看sql server执行计划,当记录量为
10条:从a1-->b1-->c1-->d1顺序扫描
1500条:从d1-->c1-->b1-->a1顺序扫描,由于d1 d2记录较多执行成本占到50%,执行到b1时行计数达到上亿条,所以花费时间很长,比较困惑?能不能强制sql server按照a1-->b1-->c1-->d1顺序执行