有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
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
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)
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 )
另外
bdbm,wjid建了索引的,那个id是自增长,每一个表都有一个
id是自增长主键,a.表和b表是通过BDBM,WJID进行关联的,另外还有其他的表但是和a表示一对一的关系,用left join联合时很快,速度没啥影响,影响最大就是这个。
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
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)