私は、両方とも時系列データを含んでいる2つの異なるMySQLテーブルを持っています(両方とも 'タイムスタンプ'カラムを含んでいます)。 'timestamp'カラムを除いて、2つのテーブルは 'client_id'カラム以外の共通の機能を共有しません。MySQL UNION LIMITsの性能
table_a
- id
- client_id
- timestamp
- ...
table_b
- id
- client_id
- timestamp
- ...
両方のテーブルのインデックスは(client_id、timestamp)です。
私はこれらの2つのテーブルを1つのページ設定された時系列に結合しようとしています。具体的には、これは、timestamp
で注文されたtable_a
とtable_b
の和集合からN個のレコード(Mのオフセットを持つ)をロードしようとしていることを意味します。
私はこのような文でこれを行うにしようとしました:
(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クエリを記述します。個々のテーブルに対するクエリ
注超高速ですか?定義により、あなたは個々のクエリのいずれかからN行以上のものを必要とすることはありませんので、これを行うには
この条件では、
type
はf最初のページ、オフセットではありません。 –@FrancisAvila、良い点。私はその質問を十分に見ていませんでした。 –