两个大表之间的MYSQL联盟

时间:2014-10-12 11:06:25

标签: mysql sql join

对于你来说,这可能是一个简单的问题,但我对MYSQL的了解有限,这里显示的是:

我有两张桌子:

Table Q with fields id(pk), symbol, timestamp(bigint) and a few data fields
Table T with fields id(pk), symbol, timestamp(bigint) and a few data fields.

表Q有大约8亿行,表T大约有80万行。

我想要一个符号的报告,其中Q和T的行按时间戳顺序混合。使用T行,Q中的数据字段应为NULL,反之亦然。

有人可以推荐一下查询的外观吗?此外,关于如何构建索引的建议将是很好的。

已尝试过很多关于内部,外部联接,联合所有等的变化,但无济于事。

1 个答案:

答案 0 :(得分:1)

听起来你需要一个简单的UNION ALL(可能是联合,因为你指示一个条目只存在于一个表中或者另一个表中)。由于表格相同,应该很容易。

如果您希望按特定顺序进行交易,我会根据您的标准建议表上的索引加上日期/时间字段,否则ORDER BY子句可能会导致您的时间性能下降。如果您想要更多列,只需确保联合的每个查询都匹配所需列的相同顺序和相同的数据类型。

select ID, Symbol, timestamp
   from Q
   where symbol = 'something'
UNION ALL
select ID, Symbol, timestamp
   from T
   where symbol = 'something'

同样,如果您想要更多条件,可以将每个WHERE子句调整为类似

   where symbol = 'something'
     and timestamp between someStartTime and someEndTime