1

我有一些工作代码,但希望进行改进以减少到数据库的往返次数。

概括

我有三个数据库表:

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 调用。我可以将标签和关系的创建合并到同一个调用中吗?

另外,作为最后的优化,我可以将它全部推送到一个数据库调用中吗?这将根据现有的两个用户创建关系和标签?

4

2 回答 2

1

在不了解您的架构的情况下,很难给出具体的建议。通常在这种情况下,解决方案是使用 UPSERT / MERGE 或数据库提供的类似东西。对于 MySQL,您可能希望查看INSERT ... ON DUPLICATE KEY UPDATE

于 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))

您可以使用 Philippe 提到的insert... on duplicate key update

您可以将两个命令放在一个字符串中,用;

最后,您可以编写自己的存储过程来完成所有任务(检查,如果不存在则插入,检查关系是否存在并插入)。这不仅是单程到 DB,而且发送到 DB 的查询也是最短的。

于 2013-01-26T21:40:38.370 回答