大数据量情况下UnionALL分表查询分页效率极低

火星大能猫 2017-10-31 05:52:45

(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
...全文
1735 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
带我飞的云 2019-05-28
  • 打赏
  • 举报
回复
如果光查询ID的话,应该不会太慢,你是不是所其他属性也拿出来了?
AHUA1001 2019-05-27
  • 打赏
  • 举报
回复
如果两个表的id没有相同的,可以把union改成union all。
如果两个表的id有相同的,建议新建一个表,存储去重后的结果。
qq_33905991 2019-05-24
  • 打赏
  • 举报
回复
[code=csharp][code=java][code=php][code=Json]
[/code][/code][/code][/code]
zjcxc 2017-11-03
  • 打赏
  • 举报
回复
忘记了一件事,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;
zjcxc 2017-11-02
  • 打赏
  • 举报
回复
看下表结构,执行计划都挤到一块了,没举动看
火星大能猫 2017-11-02
  • 打赏
  • 举报
回复
用的就是union all 代码写错了, 效率低的很
zjcxc 2017-11-01
  • 打赏
  • 举报
回复
union意味着去重,如果两个表的数据不重复,用 union all
火星大能猫 2017-11-01
  • 打赏
  • 举报
回复
顶起来....
rucypli 2017-11-01
  • 打赏
  • 举报
回复
也可以事先把结果union到一张表里 然后直接对外提供结果
火星大能猫 2017-10-31
  • 打赏
  • 举报
回复
PRIMARY T_StudentAttendanceDetails201701 index ModifyTime 6 943851 Using index UNION T_StudentAttendanceDetails201707 index index_ModifyTime 6 1205527 Using index UNION RESULT <union1,2> ALL Using temporary

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧