我有兩個不同的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