比如:
select * from (
select * from 主表 where 条件列=@用户输入的条件) a
left join 从表1 b on a.id1=b.id
left join 从表2 c on a.id1=c.id
....这样的话当用户选择出来的结果记录越少,速度越快

解决方案 »

  1.   

    跟据大力的:
    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查看执行计划,为什么第一个的花费还比第二个小呢?
      

  2.   

    利用SQL查询分析器里的
    "索引优化向导",功能很强,保你满意
      

  3.   

    将数据量最小的两个或3个表关联输出到临时表a中。
    select 
    from 临时表a
    join 其他表
    join 其他表
    。你执行的速度比楼上的快得多。这是我已经遇到过得问题。
    综合很多试验得到的最好方法。
    你可以试试!所以你得写成存储过程,因为无论怎么写连接得表太多,查询就会慢。
      

  4.   

    记住一定是临时表数据量小得表写在from后面。
      

  5.   

    非常感谢各位的回复
    上述情况在实际业务中为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顺序执行