java - 一个 DELETE 和 INSERT 相对于多个 SELECT 和一个 UPDATE 有多昂贵?

标签 java mysql

目前我的问题有点含糊,因为我不确定我是否应该在线发布任何公司代码或任何东西。但这里是。

假设我需要更新 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) 字段。不确定它是否有助于回答问题,但无论如何我都会提供。

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

最佳答案

要完全回答您的问题,我们需要查看您的 SELECT 语句,但是如果您的 UPDATE 不改变主键值,我会假设 UPDATE 更有效。这背后的原因是索引值不必调整,而在 DELETE & INSERT 的情况下索引将被调整。

在大多数情况下,唯一可靠的测试方法是同时使用这两种方法和标记耗时的基准。

关于java - 一个 DELETE 和 INSERT 相对于多个 SELECT 和一个 UPDATE 有多昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814213/

相关文章:

使用 Rails/ActiveRecord 的 MySQL 函数

mysql - 如何编写查询来确定 'AB' 和 'BA' 是否相同?

java - Java/Android Realm - 保留查询/结果的状态

java - Gradle 中的 Maven 包阶段等效

python - SQLAlchemy 中列值作为 `REGEXP` 模式?

mysql - 如何在 CentOS 中加密现有的 mariadb 表?

php - 有没有办法直接在我的 Mysql 中修复编码问题?

静态方法的Java实例变量

java - 如何从html中的Javascript访问Java中的方法?

java - 将命令行 unicode 参数传递给 Java 代码