优化插入

时间:2013-01-26 16:15:28

标签: java mysql jdbc

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

摘要

我有三个数据库表:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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的查询也是最短的。