两张一样的表,查数据,分开查快还是union快?就是说,有条数据不知道在哪个表里,现在要查出来.程序里可以先查一个表,没有的话再查另一个表,还是用union连接后直接查出呢?哪种效率高点呢?还想问个问题就是对于字典表的连接问题.表列比较多,几百个字段,而对应了很多字典表,查的时候做表连接呢?还是说程序显示的时候,在做字典转换?注:字典表在程序启动时都加入到了程序的cache中.

解决方案 »

  1.   


    union all 是两张表同时进行查询,肯定比分开一个一个的表查询要快很多。。
      

  2.   


    那程序,判断的话也许第一次就查到了,第二次就不用查了,
    表的数据量很大.union的效率会降低么?
      

  3.   


    /*
    这个得看具体需求
    你说:[两张一样的,有条数据不知道在哪个表里,现在要查出来.
           程序里可以先查一个表,没有的话再查另一个表,
           还是用union连接后直接查出呢?]
    对于这条数据,有两种情况:
    1.在tab1表里
    2.在tab2表里
    如果此数据在tab1里面,那么你的查询将会很快,
    如果在tab2里面,按你说的分开查询,在程序里面,
    你就得写判断:
       if 数据在tab1里面 then 返回数据
       else if 数据在tab2里面 then 返回数据
       else 数据不存在
    为了避免这么麻烦的条件判断,你为何不将此两张表连接起来呢(如果数据量小的话);union 和union all连接两张表:
    union:将会过滤掉重复的数据行
    union all:将两个属性列相同(既查询出来的属性列数据类型相同)的表连接起来,
               不删除重复的数据行;
    从效率角度看:
    union all远远大于union,在数据量大的情况下,当然二三十条数据时看不出有什么差别的;
    因为:union删除重复的数据行需要一段时间,而union all不需要删除重复数据行。
    */
      

  4.   

    楼主说的只有1条数据,或在A,或在B。
    我觉得不管是Union,Union All,或则是先查A,再查B,对性能的影响都不大,因为你的索引已经建好,匹配一条记录的时间绝对在1s以内!
      

  5.   

    不止一条记录.感谢各位.那就用union了.