我有两个不同的 MySQL 表,它们都包含时间序列数据(其中都包含“时间戳”列)。除了“timestamp”列之外,这两个表除了“client_id”列之外没有任何共同的特征。
table_a
- id
- client_id
- timestamp
- ...
table_b
- id
- client_id
- timestamp
- ...
两个表都在(client_id,timestamp)上建立索引。
我正在尝试将这两个表组合成一个分页时间序列。具体来说,我的意思是我试图从 and 的table_a
并集加载 N 条记录(偏移量为 M) table_b
,按timestamp
.
我试图用这样的声明来做到这一点:
(SELECT 'a', id FROM table_a WHERE client_id=1) UNION (SELECT 'b', id FROM table_b WHERE client_id=1) ORDER BY timestamp LIMIT 100;
不幸的是,生成的查询似乎是从两个表中获取所有匹配的行,组合,然后应用 LIMIT。
请注意,对单个表的查询非常快:
SELECT 'a', id FROM table_a WHERE client_id=1 ORDER by timestamp LIMIT 100
有没有更好的方法来索引表或编写 UNION 查询?