私はstats
テーブルを持っています。毎日のトラフィックが記録され、毎日レコードが約500,000レコード挿入されています。この表の 構造のみMySQLの複数のinsert from single select
私は他のテーブルで、このテーブルのデータとストア結果に分析を実行する必要がある。この表は、これまでサイズが増加していると私は書き込み操作のためにそれを維持したい
id | ip | url | date | country | referrer | type | rate | category |....
のようなものです報告のため。私は次のようにデータを保存するために計画しています
..
表stats_by_date
は、日付ごとにグループ化され、毎日の統計を持っています。
表stats_by_country
は、国ごとにグループ化された毎日の統計情報を持ちます。
表stats_by_type
は、種類ごとにグループ化された毎日の統計情報を持ちます。
表stats_by_category
は、カテゴリ別にグループ化され、毎日の統計を持っています。
この方法の代わりに50万行のみ1行は250行が毎日のために存在しますcountryテーブルを除いて毎日のために存在します。
30分ごとにメインテーブルからこれらのテーブルにデータを挿入する必要があります。私はこのように
INSERT INTO `stats_by_date` (id, ip, date, rate, type)
(
SELECT id, COUNT(ip), date, rate, type FROM `stats`
WHERE date=today
GROUP BY date
);
INSERT INTO `stats_by_type` (id, ip, date, rate, type)
(
SELECT id, COUNT(ip), date, rate, type FROM `stats`
WHERE date=today
GROUP BY type
);
ような複数のクエリでデータを挿入することができる知っている はGROUP BY
に基づいて、メインテーブルから同じデータを読み取り、挿入されます少なくとも4つのINSERT
クエリが存在することになります。
メインテーブルから一度だけ読み込み、他のすべてのテーブルに挿入したいとします。これを達成するために、私の知る限り 私はメインテーブルからデータを格納し、その後、このTEMPORARY TABLE
から、私は複数のINSERT
を行うことができます持っているTEMPORARY TABLE
を作成する必要があります知っています。私が知りたい
がこれを行うには、他の効率的な方法があり、それが単一SELECT
、いくつかの方法で行うことができますか?
ご覧ください。
統計表内のデータ(プライマリー)は、ウェブページへの毎日の訪問で、私は、バッチアップロードプロセスを持っていないが、私は、サマリー表にデータを挿入するために、時間ベースのトリガーを使用することになります。 –
@TallboY。 。 。時間ベースの*イベント*は、各インサートのトリガーよりもはるかに良いアイデアです。 –
このように 'INSERT 'を単なる' SELECT'でやる方法はありません。出来ますか? –