union all效率低下,大概union all数十张表,单表select仅需0.0003-0.002秒,但union all后需要0.6秒左右想改善下效率这种情况该用存储过程、视图、临时表哪种方法来解决?

解决方案 »

  1.   

    如果要连结的表记录数很大的话,union最好别用,这个是乘法就算的!也就是A UNION B,如果A 有10w 记录,B也有10W记录,
    结果相当要从10w× 10W条记录查询检索出来符合条件的记录!可想效率多查!
    还不如一个表一个表的查呢!union一般用在表的记录数比较少的情况下!
      

  2.   

    union all 仅仅是拼接,能提高的幅度应该不是很大……
      

  3.   

    或者先WHERE再UNIONselect * from t1 where id=100 
    union all
    select * from t2 where id=100 
      

  4.   

    已经where后再拼接的,效率还是这样,现在的数据还仅仅是测试数据,几千条而已就这样子了,将来实际应用没法用啊
      

  5.   

    像这样的操作不用union如何实现呢?
    单独select每张表,再拼接吗,那还有排序呢,用临时表?怎样是最有效的解决方法呢?
      

  6.   

    从你的描述来看,数十张表的表结构应该是一样的,做了分表才导致有几十个一样结构的表吧。尝试下把你的几十个表做成一个合并表,mysql> CREATE TABLE t1(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;  
    mysql> CREATE TABLE t2(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;  
    mysql> INSERT INTO t1(a) VALUES(1),(2);  
    mysql> INSERT INTO t2(a) VALUES(1),(2);  
    mysql> CREATE TABLE mrg(a INT NOT NULL PRIMARY KEY)       -> ENGINE=MERGE UNION=(t1, t2) INSERT_METHOD=LAST;  
    mysql> SELECT a FROM mrg;  
    +------+  |  a    |  +------+  
    |     1 |  
    |     1 |  
    |     2 |  
    |     2 |  
    +------+