有两个表,数据都上10万条,原来的跨表count的语句是这样的:
select ID,(select Count(*) from A2 where A2.A1ID = A1.ID) as A2Count from A1
感觉速度挺慢的,怎么能优化呢?

解决方案 »

  1.   

    select ID,Count(*)
     from A1 AS a
    LEFT OUTER JOIN A2 AS b
     on a.ID=b.A1ID
    group by ID
      

  2.   


    --加索引
    create index A1_id on A1(id)
    create index A2_a1id on A2(A1id)
      

  3.   


      
    SELECT  ID,b.A2Count
    FROM    A1,
            (
            SELECT A1ID,COUNT(*) as A2Count
            FROM  A2 
            GROUP BY A1ID 
            )b
    WHERE  A1.ID=b.A1ID --若表A1上的ID有索引会更快.
      

  4.   

    select a.ID,Count(b.A1ID)--指定列
     from A1 AS a
    LEFT OUTER JOIN A2 AS b
     on a.ID=b.A1ID
    group by a.ID
      

  5.   

    A1表的ID為唯一時可以直接連接
      

  6.   

    其实子查询和left join速度差不多,加上索引速度应该有明显提高。