1

動作するコードがいくつかありますが、DBへのラウンドトリップの数を減らすために改善を行うことを検討しています。

概要

3つのデータベーステーブルがあります。

users = [user_id, firstname, lastname]

relationship = [relationship_id, user_id_one, user_id_two, tag_id]

tag = [tag_id, tag]

私のコードのロジックは次のとおりです。

if(tagDoesntExist) { createTag(tag) }
if(checkIfUserExists(useronedetails) && checkIfUserExists(usertwodetails)) {
  createRelationship(useronedetails, usertwodetails, tag)
}

これは、少なくとも4つのDB呼び出しで構成されます。タグの作成と関係を同じ呼び出しに組み合わせることができますか?

また、最終的な最適化として、すべてを1つのDB呼び出しにプッシュできますか?これにより、既存の2人のユーザーに基づいて、関係とタグが作成されますか?

4

2 に答える 2

1

スキーマを知らなければ、具体的なアドバイスをするのは難しいです。通常、このような状況での解決策は、UPSERT/MERGEまたはデータベースによって提供される同様のものを使用することです。MySQLの場合は、 INSERT ... ON DUPLICATEKEYUPDATEを確認することをお勧めします。

于 2013-01-26T19:24:22.300 に答える
0

条件付き挿入の場合、INSERT...SELECT構文を使用できます。

Insert into mytable(name,cola) (select myname,vala from dual where not exists (select 1 from mytable where name=myname))

フィリップが言及したものを使用できますinsert... on duplicate key update

両方のコマンドを1つの文字列に入れて、;

最後に、すべてのタスク(チェック、存在しない場合は挿入、関係が存在するかどうかをチェックして挿入)を実行する独自の保存手順を作成できます。これはDBへの1回の移動であるだけでなく、DBに送信されるクエリも最短になります。

于 2013-01-26T21:40:38.370 に答える