2016-11-11 6 views
1

SQLの問題を解決するのに苦労しています。私はすでにインターネットを精査しており、解決策を見つけることができませんでした。サブクエリの更新テーブルが実際に遅いです。

私は以下のいくつかの文脈を提供しました。私は関連性があると思うものだけを含めました。

既存の表:

Group 
id - has index 

Admin 
id - has index 

Post 
id - has index 
group_id - has index 
admin_id - has index 

私の問題:

ポストが作成されたときにadmin_id列に移入されなかったソフトウェアのバグがありました。今までは、すべてのグループに管理者が1人しかいないと想定されていたので、これは問題ありませんでした。

グループごとに複数の管理者を追加する機能が追加されました。そのため、admin_idに値を設定する必要があります。ソフトウェアのバグは修正されましたが、各投稿ごとにadmin_idに戻って入力する必要があります。

マイソリューション/質問:

私が間違って何をしているのですか?以下は私の質問です。それは文字どおり実行するのに45分かかります。私はこれを解決する方法を見つけることができません。私はそれが必要な場合は45分かかると大丈夫ですが、私は本当にそれを嫌い、私はSQLでこれを行うための効率的な方法を見つけることに夢中になります。

これまでに試したことは何ですか。私は、インデックスが遅く書き込みを作ることを読ん

インターネットを精練し、障害のほかに

は...ので、私はposts.admin_idにインデックスを削除して、20%のパフォーマンス向上を見てきましたが、それは今も良いことです十分な。

+0

しかし、本当の問題は:あなたができる場合joinを使って正しい 'admin_Id'を取得し、' posts'テーブルを更新するのはどうしてですか?必要な時にいつでも参加できます。 –

+0

うわー。私は馬鹿のように感じる。ソリューションが機能しました。私はグループを全く必要とせず、サブクエリはまったく必要ありませんでした。あなたが質問に答えたら私はあなたの答えを選択します。 – tambykojak

答えて

1

私の知る限り、あなたはgroupsテーブルを必要としない、あなたはFROM句の更新のターゲット表を繰り返さないでください。

UPDATE posts 
    SET admin_id = admins_groups.admin_id 
FROM admin_groups 
WHERE posts.group_id = admins_groups.group_id 
関連する問題