我有两个不同的MySQL表,都包含时间序列数据(在这两个都包含'timestamp'列)。除'timestamp'列之外,这两个表除了'client_id'列之外不共享任何共同特征。MySQL的联合限制的性能
table_a
- id
- client_id
- timestamp
- ...
table_b
- id
- client_id
- timestamp
- ...
这两个表都在(client_id,timestamp)上编制索引。
我想将这两个表合并成一个分页的时间序列。具体而言,我的意思是我试图从table_a
和table_b
的联合加载N个记录(偏移量为M),按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;
不幸的是,生成的查询似乎来自两个表抓取所有匹配的行,组合,然后应用极限。
注意对单个表查询是超级快:
SELECT 'a', id FROM table_a WHERE client_id=1 ORDER by timestamp LIMIT 100
有没有更好的方式来索引的表或写入联合查询?
这将只适用于f第一页,不适用于偏移量。 – 2012-04-18 16:14:12
@FrancisAvila,好点。在这个问题上我没有仔细观察。 – 2012-04-18 16:46:10