両方に時系列データが含まれている 2 つの異なる MySQL テーブルがあります (どちらにも「タイムスタンプ」列が含まれています)。「timestamp」列を除いて、2 つのテーブルは「client_id」列以外に共通の機能を共有していません。
table_a
- id
- client_id
- timestamp
- ...
table_b
- id
- client_id
- timestamp
- ...
両方のテーブルは (client_id、タイムスタンプ) でインデックス化されます。
これらの 2 つのテーブルを単一のページ付けされた時系列に結合しようとしています。具体的に言うと、これは、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 クエリを記述したりするより良い方法はありますか?