有3张表,a (ID,BDBM,WJID,***其它字段)
b(ID,BDBM,WJID,其它字段)
a和b是一对多的关系,现在主要是获取a表内容,同时获取同条件的b表的第一行数据内容,所以用top1,发现耗时相当慢,才16000多调数据居然花了27秒,如果2表联合查询才1秒左右,大家看看如何写才能加速。select a.*,(select top 1 b.xx from b where b.BDBM=a.BDBM,b.WJID=a.WJID) as xx from  a

解决方案 »

  1.   

    try:
    select a.*,b.xx 
    from a inner join b t on a.bdbm=t.bdbm and a.wjid=b.wjid 
    where not exists(select 1 from b where BDBM=t.BDBM and WJID=t.WJID and id<t.id)
      

  2.   

    另外,试试在b表bdbm,wjid,id列上建索引.
      

  3.   

    select
     a.*,b.xx 
    from
     a inner join b t on a.bdbm=t.bdbm and a.wjid=b.wjid 
    where
     id=(select max(id) from b where BDBM=t.BDBM and WJID=t.WJID )
      

  4.   

    谢谢,我试试
    另外
    bdbm,wjid建了索引的,那个id是自增长,每一个表都有一个
      

  5.   

    还有1张表和a是一对1的没太大关系,我就不列了,那个用 left join很快
      

  6.   

    谢谢
    id是自增长主键,a.表和b表是通过BDBM,WJID进行关联的,另外还有其他的表但是和a表示一对一的关系,用left join联合时很快,速度没啥影响,影响最大就是这个。
      

  7.   

    2005+
    select a.*,
    b.bField1,
    b.bField2,
    b.bField3,
    ....from a
    outer apply
    (select top 1 * FROM b where b.BDBM=a.BDBM and b.WJID=a.WJID) as b
      

  8.   

    select m.* , n.* from a m , b n where m.id = n.WJID and n.BM = (select min(BM) from b where wjid = n.wjid)
    select m.* , n.* from a m , b n where m.id = n.WJID and not exists (select 1 from b where wjid = n.wjid and bm < n.bm)