使用视图从多个表中选择最近的记录

时间:2017-06-14 23:08:12

标签: mysql

我有两个MySQL表,其结构相同,我存储数据:

tableA(id, value, updatedAt)
tableB(id, value, updatedAt)

第三方应用程序执行SELECT value FROM myTable WHERE id = 123。现在,我希望该查询同时查看tableAtableB,并从具有最新value日期时间的updatedAt返回id

  • 对于给定的myTable,它可能只在其中一个表中,两者都没有。
  • 这些表很大,每个表都有500M记录。
  • tableA开始大约有2k / s的选择,那些需要快速。
  • tableBCREATE VIEW myTable AS (select * from tableA) UNION (select * from tableB) ORDER BY updatedAt DESC LIMIT 1 的更新时间约为200万次。更新不得破坏选择性能,但不能快速。
  • 数据表是从独立的Feed中更新的,这就是它们被分开的原因。

我试图创建一个视图。

UNION

但是因为我使用TEMPTABLE MySQL会使用id算法,除了不工作之外,它的速度非常慢。

我的第二次尝试不支持CREATE VIEW myTable AS SELECT IF(a.updatedAt > b.updatedAt, a.id, b.id) AS id, IF(a.updatedAt > b.updatedAt, a.value, b.value) AS value, IF(a.updatedAt > b.updatedAt, a.modifiedAt, b.updatedAt) AS updatedAt FROM tableA AS a LEFT OUTER JOIN tableB AS b ON a.id = b.id 是否仅存在于其中一个表中(假设我使用了错误的JOIN?),除此之外它看起来很丑陋。

#!/usr/bin/env python

由于

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

 CREATE VIEW myTable AS
  SELECT
   IF(a.updatedAt > b.updatedAt, a.id, b.id) AS id,
   IF(a.updatedAt > b.updatedAt, a.value, b.value) AS VALUE,
   IF(a.updatedAt > b.updatedAt, a.modifiedAt, b.updatedAt) AS updatedAt
 FROM tableA a, tableB b;