【问题标题】:MYSQL Union between two large tables两个大表之间的MYSQL联合
【发布时间】:2014-10-12 11:06:24
【问题描述】:

这对各位专家来说可能是一个简单的问题,但我对 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 大约有 8000 万行。

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

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

在内部、外部联接、联合所有等方面尝试了很多变体,但无济于事。

【问题讨论】:

  • 您能否分享您的数据样本以及结果应该是什么样的?

标签: mysql sql join


【解决方案1】:

听起来您需要一个简单的 UNION ALL(可以是 union,因为您指出一个条目将只存在于一个表中,或者无论如何都只存在于另一个表中)。由于表相同,应该很容易。

如果您希望交易按特定顺序进行,我会建议根据您的标准加上日期/时间字段在表上建立索引,否则 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2015-04-27
    • 2015-08-22
    相关资源
    最近更新 更多