select a.*,b.*
from (select * from test1) a
left jioin (select * from test2) b on b.id=a.ida表与b表的数据量很大,查询速度特别慢

解决方案 »

  1.   

    首先应考虑在 where 及 order by 涉及的列上建立索引,子查询条件内尽量不要使用全表扫描的条件,例如不要使用!=或<>,条件不要使用or来连接等等,如果确实需要OR连接,请修改为union来连接,其实最终目的还是避免全表扫描的条件
      

  2.   

    首先,你的查询其实可以写成:
    SELECT a.*,b.*
      FROM test1 a
      LEFT JOIN test2 b ON b.id=a.id其次,你使用了左外连接,而且没有 WHERE 条件,意味着 test1 中所有的数据都会返回,同时表很大,所以很慢。建议业务上加一些限制条件,如果一定要查询很多数据给前端显示,考虑使用分页显示;同时确认关联字段(id)上创建了索引;还有,实际项目不要用 * 返回所有字段,只输出你需要的信息。
      

  3.   

    如果只是连接后显示列表的话,不应该把压力都给数据库的。做成分页显示,sql语句只取a表的一个页面,然后在绑定a表这页数据时,根据ID去取b表的数据。这样不是飞快了?
      

  4.   

    这是个外连接,所以连接顺序已经没法调整了,你确定这个外连接是必要的吗?
    如果外连接必要的话,给出驱动表test1、test2表的数据总量,以及这个查询最后输出的数据量
      

  5.   

    一般都不会select a.*和b.*的,select你所需的字段就好
      

  6.   

    可以试试用内连接查询:select a*,b* from test a,test b where a.id=b.id 尽量不要用子查询,影响效率。
      

  7.   

    用视图把两个表查询到视图上,再select视图,会很快
      

  8.   

    这是一个多表关联的问题,试试看《如何优化JOIN性能》这篇文章能否帮到您