(SELECT
ID
FROM
T_Student201701)
UNION
(SELECT
ID
FROM T_Student201707)
LIMIT 0,
 10;比如查询2017年的学生记录,共1月份和7月份两张分表
需要分页查询并排序
这样查询效率极低,如果每个表单独查询秒查询.
怎么解决呢?查询计划如图
1 PRIMARY T_StudentAttendanceDetails201701 index ModifyTime 6 943851 Using index
2 UNION T_StudentAttendanceDetails201707 index index_ModifyTime 6 1205527 Using index
UNION RESULT <union1,2> ALL Using temporary

解决方案 »

  1.   

    PRIMARY T_StudentAttendanceDetails201701 index ModifyTime 6 943851 Using index
    UNION T_StudentAttendanceDetails201707 index index_ModifyTime 6 1205527 Using indexUNION RESULT <union1,2> ALL Using temporary
      

  2.   

    union意味着去重,如果两个表的数据不重复,用 union all
      

  3.   

    也可以事先把结果union到一张表里     然后直接对外提供结果
      

  4.   

    用的就是union all
    代码写错了,
    效率低的很
      

  5.   

    忘记了一件事,select id from a union all select id from b , 在 MySQL 中是个坑
    你这个查询应该把 limit 带到子查询中才行,否则它先先算出 子查询,再对子查询的结果分页(SELECT
                ID
            FROM
                T_Student201701 LIMIT 0, 10)
            UNION
                    (SELECT
                ID
            FROM T_Student201707 LIMIT 0, 10)
    LIMIT 0, 10;
      

  6.   

    [code=csharp][code=java][code=php][code=Json][/code][/code][/code][/code]
      

  7.   

    如果两个表的id没有相同的,可以把union改成union all。
    如果两个表的id有相同的,建议新建一个表,存储去重后的结果。