同时从多个mySQL表中查询

时间:2014-01-27 09:59:29

标签: mysql sql union

我想查询一些数据,但是根据收集数据的月份(例如201301,201302)将数据分配到不同的表中。我可以尝试通过从我需要的所有表中进行联合来查询表。这就是我到目前为止所拥有的......

select * from table_2013_01
where user_id = 39858
UNION ALL
select * from table_2013_02
where user_id = 39858
UNION ALL
.
.
.
select * from table_2014_01
where user_id= 39858
order by date asc

我的问题是:

  1. 有没有比这更好的方法,因为我可能想要从2010年开始检索数据?这意味着一次性完成所有36个表的联合?
  2. 这是否会导致性能问题,因为这是一个实时服务器,我不能超过2分钟进行查询,否则它会向DBA发送警报。
  3. 注意: 我只有DB的读取权限。我甚至无法创建临时表。

2 个答案:

答案 0 :(得分:1)

如果你可以在user_id上创建/放置索引(看来你在where子句中没有任何其他参数),那么检索会更快,然后就可以了

    select * from (
      select * from table_2013_01
      where user_id = 39858
      UNION ALL
      select * from table_2013_02
      where user_id = 39858
      UNION ALL
      .
      .
      .
      select * from table_2014_01
      where user_id= 39858
    ) t order by date asc;

如果您有权创建过程,那么您不需要手动编写这些查询,您可以创建动态SQL(字符串说* final_sql *)并可以运行它:

PREPARE stmt FROM @final_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

答案 1 :(得分:0)

尝试这样的事情:

select *
from (select * from table_2013_01 
  union all 
  select * from table_2013_02 
  union all 
  select * from table_2013_03) a
where a.user_id = 12212;