購読している人を見つけてテーブルに電子メールを挿入するクエリがあります。これを更新するには、常にテーブルを切り捨て、すべてのレコードを再度挿入します。 これは切り捨てずに毎回すべてのデータを挿入したい(非常に大きなレコードでは時間がかかる)が、変更があった場合は古いテーブルで選択してチェックし、テーブルに記録する。クエリをSQLのテーブルと比較する方法
任意のアイデアどのように私はこのソリューションにアプローチしますか?
購読している人を見つけてテーブルに電子メールを挿入するクエリがあります。これを更新するには、常にテーブルを切り捨て、すべてのレコードを再度挿入します。 これは切り捨てずに毎回すべてのデータを挿入したい(非常に大きなレコードでは時間がかかる)が、変更があった場合は古いテーブルで選択してチェックし、テーブルに記録する。クエリをSQLのテーブルと比較する方法
任意のアイデアどのように私はこのソリューションにアプローチしますか?
存在しない場合は、電子メールが存在するかどうかを確認し、そうでない場合は挿入文を書き込むことができます。以下、それはあなたの役に立てば幸い:) (メール= @ yoursuscribeemail t_emailsから選択*)が存在しない場合は t_emailsに 挿入を始める(電子メール)の値(@yoursuscribeemail) エンド 私はsuscribeメールが来ていると仮定しています例です。ユーザー側からコメントでない場合
顧客に(電子メールアドレスを取得した)カラムがあります。値が1の場合は購読されていることを意味し、0の場合はテーブルの両方のフィールドを共有しています。 – david
あなたに声明を書くでしょう –
delete from subscriber_emails
where email in (select email from subscriber_emails e
join users u on e.email=u.email
where u.subscribed=false);
insert into subscriber_emails (email)
select email from users u
outer join subscriber_emails e on u.email=e.email
where e.email is null;
2つのテーブルのスキーマがわからないので、ここでいくつかのプレースホルダを使用する必要があるため、必要に応じてキーワードを変更してください。
には、列に一意のインデックスがあります。 'insert ignore'を実行しても再度挿入されませんか?おそらく '重複するキーの更新を挿入する'をしますか?ちなみに、 'insert ignore'は一般的には嫌われます。 – Drew
例は、あなたの問題を理解し、最良の答えに到達するのに役立ちます。 – Ajay
テーブルを再作成するほうがおそらく高速です。 –