有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java相对于多次选择和一次更新,删除和插入的代价有多高?

我的问题目前有点模糊,因为我不确定我是否应该在网上发布任何公司代码或任何东西。但事情是这样的

假设我需要更新MySQL数据库中的一个特定字段。为了使用Java客户机程序实现这一点,我必须使用多个SELECT语句来检查字段是否应该更新,然后使用检索到的信息适当地更新它

例如

//created a Connection called con already...
PreparedStatement selectStatement = con.prepareStatement("SELECT * FROM myTable" /*+ etc*/); //example query only! I'm not actually going to use "SELECT * FROM myTable"!
//more selectStatements follow
PreparedStatement updateStatement = con.prepareStatement("UPDATE myTable SET field1 = ? WHERE id = ?");
ResultSet rs = selectStatement.executeQuery();
//more ResultSets from the other selectStatements
//process ResultSets and retrieve information that indicates wwhether an update must take place
if(conditionOccurred) { //Assuming we need to update
    updateStatement.setText(...);
    updateStatement.executeUpdate();
}

(我还没有在代码中包含try-catches(抱歉,我有点懒,因为这只是一个做作的例子),但我想我还必须抓住潜在的SQLExceptions,我猜…)

我想知道的是:考虑到我现在需要使用多个select语句来检查是否应该进行更新,如果我删除该行,然后插入一个包含所有更新信息的新行,它会更“昂贵”,还是在速度方面更昂贵?(记忆目前不是什么大问题,不过如果我做的事情在这方面有很大的缺陷,我很乐意听到!)

TL;DR:如果我使用多个SELECT语句,然后对某些字段使用UPDATE,那么简单地DELETE然后INSERT一个新行会更有效吗

额外细节:我目前使用的表有一个自动递增的ID、一个VARCHAR字段(要更新的字段具有唯一性约束)、两个日期字段和一个CHAR(64)字段。不确定这是否有助于回答这个问题,但无论如何我都会提供

如果您需要更多详细信息,请告诉我,并提前感谢任何可能提供一些见解的人


共 (2) 个答案

  1. # 1 楼答案

    为了完全回答您的问题,我们需要查看您的SELECT语句,但是如果您的更新没有改变主键值,我会假设更新更有效。其背后的原因是,在删除和;插入索引将是

    在大多数情况下,测试这一点的唯一可靠方法是使用这两种方法,并对经过的时间进行基准测试

  2. # 2 楼答案

    我是根据我从高级数据库管理课程中获得的知识来回答你的问题的。我想说这是非常主观的,因为你关心的是速度,而不是内存的使用

    检索完成后,根据Select语句,数据被缓存,当需要任何必要的Update时,直接编辑缓存中的字段。如果您正在执行DeleteInsert中的后一种操作,这将节省读写行程

    据我所知,这将为单个事务节省毫秒的处理时间,如果你从全局来看,当执行多个事务时,这将为你节省很多时间。但是,如果select语句涉及太多处理大量数据的查询,那么后一种方法可能会更有效

    我相信,通过您对SQL语句的额外输入,我们将能够为您提供更好、更准确的建议。:)我希望有帮助