我的问题目前有点含糊,因为我不确定我应该在网上发布任何公司代码或任何东西。但是在这里。DELETE和INSERT相对于多个SELECT和UPDATE有多贵?
假设我需要更新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字段(要更新的字段,具有唯一性约束),2个日期字段和CHAR(64)字段。不知道它是否有助于回答问题,但无论如何我都会提供。
请让我知道是否有更多的细节,你需要,并提前感谢任何人可能提供一些见解。
啊,好的。关于您需要进行基准测试的评论,我怀疑是这样。我没有想到你指出的索引问题。那么我假设,如果我在'VARCHAR'字段正在更新时放置唯一性约束,那么这对'UPDATE'会产生问题?我已经将这些信息添加到了原始文章中,对此抱歉。 – blahman 2012-01-11 04:52:10
是的,这是正确的。 – 2012-01-11 05:18:35
谢谢! – blahman 2012-01-11 05:28:17