同じデータベース(MySql)に2つのテーブルがあり、1つにデータが入力されており、そこにデータが頻繁に追加されています。
最初のテーブルに追加されたデータを、コンソールでMySqlコマンドを使用して他の(同期された)に存在させたい(トリガー、イベントなどの他のメソッドなしで)
これは可能ですか?可能な場合、コマンドは何ですか?
重複を根絶するために両方のテーブルに主キーまたは一意のキーを実装している場合、これはmysql replace into機能を使用して実現できます。 replace intoは、insert intoと同様の構文を持ちます。テーブルにキーが存在する場合、最初に古い行を削除し、次の行を挿入します。
mysql> replace into table2 select * from table1
Cronジョブを使用するか、mysqlイベントスケジューラを使用して、必要なタイミングに従って他のテーブルにデータを入力できます。
それが役に立てば幸い
これらの条件に該当する場合:
...その後、シンプルなINSERT INTO
。何かのようなもの :
INSERT INTO destTable SELECT * FROM srcTable
WHERE id > (SELECT COALESCE(MAX(id),0) FROM destTable)
これは、INSERT
からのすべての新しい行をdestTable
(同期テーブル)にsrcTable
します。
あなたが使用できるコンソールからそれを実行するには
mysql -h hostname -u username -p db_name -e "INSERT INTO destTable SELECT * FROM srcTable WHERE id > (SELECT COALESCE(MAX(id),0) FROM destTable);"
データウェアハウスアプリケーションがあり、「レポート」が問題を引き起こしているようです。 「テーブルロック」を実行するMyISAMを使用しているようです-これがおそらくレポート中に「スタック」する原因です。
データのコピー全体を含むステージングテーブルの代わりに、単に処理されるのを待っている「新しい」レコードを用意します。
「生の」(「ファクト」)テーブル全体から直接レポートを実行する代わりに、サマリーテーブルからレポートを実行します。これは、(1)はるかに高速(多くの場合、レポートでは10倍高速)であり、(2)「スタック」を回避します。
ステージングテーブルから要約を行うことをお勧めします。これにより、データを書き込む場合を除いて、ファクトテーブルは実質的に変更されません。その場合、Factテーブルに多くのインデックスは必要ありませんし、持つべきではありません。 (インデックスは取り込みを遅くします。)
これらのタスクを達成する方法の詳細については、
DWアプリケーションはかなり異なる傾向があるため、アプリについてさらに詳しく説明する必要がある場合があります。それから私は私のアドバイスでより具体的にすることができます。