select * from t1 inner join t2 on t1.id=t2.ref_id where t1.sip=0select * from
(select * from t1 where t1.sip=0) t3 inner join t2
on t3.id=t2.ref_id
哪种效率高?十分感谢

解决方案 »

  1.   

    好吧好吧,,,问题可以这样提:
    select * from t1 inner join t2 on t1.id=t2.ref_id where t1.sip=0这个语句,是先过滤t1中t1.sip=0,然后和t2连接,
    还是先 t1,t2连接,在这个结果里 过滤t1.sip=0?
      

  2.   

     分情况解答该问题(首先假设在id字段上 t1和t2都有索引)当t1.sip=0查询结果比较多的时候,先连接后where 比较快 也就是第一种比较快当t1.sip=0查询结果比较少的时候,先子查询后连接比较快 也就是第二种比较快
      

  3.   

    具体快慢要看索引和表中的数据数据。可以直接explain select ... 检查一下执行计划。
    或者贴出explain select ..以供大家分析讨论。
      

  4.   

    跟数据的分布情况有关。
    拿不定把握,看查询计划。t1.id=t2.ref_id,  (似乎是主外键关联),t1.sip上如果没有索引,那第2种就悲剧了。