本帖最后由 ChargeForward 于 2011-05-25 00:37:36 编辑

解决方案 »

  1.   

    顶个  睡了  Zzz...
      

  2.   

    商品表的 pid 建聚集索引.
      

  3.   

    你能先在主表中where一下再去left join么?
      

  4.   

    把这 改为 or 试试或存在的那个条件试试
    where pid in(@pid1,@pid2,@pid3,@pid4...)
      

  5.   

    先在product中where那16条记录出来,并在pid中建聚集索引,
    看看性能是不是能好点
    select * from
    (select * from product where pid in (@pid1,@pid2,@pid3,@pid4...))
    a left join table  on a.pid = table1.pid.....
      

  6.   

    这7张表先使用inner join (t1,t2,t3,t4,t5,t6,t7),再右连接 product表试试
    或者7张表使用inner join (t1,t2,t3,t4,t5,t6,t7)连接成一个子查询,再右连接product表
      

  7.   

    另外一个想法,
    将其它7张逻辑上有关联的表的查询与关联先建一个视图,
    然后将product 与视图关联即可,
    在视图上也可以建索引,比如视图中的pid
      

  8.   

    提个思路:
    根据传入的16个pid,先从Product表中生成记录到临时表,给临时表的pid主键设置聚集索引,其他需要用到的字段分别设置非聚集索引。按你的需求,临时表只有16条记录。
    然后用这张临时表去和其他7张表left join查询。
      

  9.   

    也是建议先16条记录到临时表。然后随便怎么join都不会慢