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-catch
es(抱歉,我有点懒,因为这只是一个做作的例子),但我想我还必须抓住潜在的SQLException
s,我猜…)
我想知道的是:考虑到我现在需要使用多个select语句来检查是否应该进行更新,如果我删除该行,然后插入一个包含所有更新信息的新行,它会更“昂贵”,还是在速度方面更昂贵?(记忆目前不是什么大问题,不过如果我做的事情在这方面有很大的缺陷,我很乐意听到!)
TL;DR:如果我使用多个SELECT
语句,然后对某些字段使用UPDATE
,那么简单地DELETE
然后INSERT
一个新行会更有效吗
额外细节:我目前使用的表有一个自动递增的ID、一个VARCHAR字段(要更新的字段具有唯一性约束)、两个日期字段和一个CHAR(64)字段。不确定这是否有助于回答这个问题,但无论如何我都会提供
如果您需要更多详细信息,请告诉我,并提前感谢任何可能提供一些见解的人
# 1 楼答案
为了完全回答您的问题,我们需要查看您的SELECT语句,但是如果您的更新没有改变主键值,我会假设更新更有效。其背后的原因是,在删除和;插入索引将是
在大多数情况下,测试这一点的唯一可靠方法是使用这两种方法,并对经过的时间进行基准测试
# 2 楼答案
我是根据我从高级数据库管理课程中获得的知识来回答你的问题的。我想说这是非常主观的,因为你关心的是速度,而不是内存的使用
检索完成后,根据
Select
语句,数据被缓存,当需要任何必要的Update
时,直接编辑缓存中的字段。如果您正在执行Delete
和Insert
中的后一种操作,这将节省读写行程据我所知,这将为单个事务节省毫秒的处理时间,如果你从全局来看,当执行多个事务时,这将为你节省很多时间。但是,如果select语句涉及太多处理大量数据的查询,那么后一种方法可能会更有效
我相信,通过您对SQL语句的额外输入,我们将能够为您提供更好、更准确的建议。:)我希望有帮助