2014-01-27 135 views
0

我想查詢一些數據,但數據是根據收集數據的月份(例如201301,201302)分配到不同的表中。我可以嘗試通過從我需要的所有表中進行聯合來查詢表。這是我迄今爲止..同時從多個mySQL表中查詢

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發送警報。

注意: 我只能從數據庫讀取權限。我甚至無法創建臨時表。

+0

查看錶分區 –

回答

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; 
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;