MySQL 和 ORACLE 性能 - SELECT + 检索行 + DELETE 与 DELETE WHERE SELECT FROM

标签 mysql performance oracle

我正在对我正在开发的当前应用程序进行一些性能改进,并且我正在考虑接下来哪些场景的性能更好(考虑良好的服务器硬件,或者根本忘记硬件)。

考虑一下您需要对需要从其他表中获取的特定信息进行更新插入删除。哪种场景会有更好的性能?

编辑:由于本例中的性能问题高度特定于(平台|供应商),因此我对 MySQL 更好奇,并且ORACLE数据库管理系统...

<强>1。仅通过 SQL 即可完成工作
例如(所有查询都只是假设):

INSERT INTO table1 VALUES (
    val1,
    val2,
    val3,
    (SELECT col3 FROM table2 WHERE col1 = [some_variable] LIMIT 1),
    val5
)

DELETE FROM table1 WHERE col1 IN (SELECT col5 FROM table2 WHERE col1 = [some_variable])

UPDATE table1 SET col4 = (SELECT col3 FROM table2 WHERE col1 = [var1] LIMIT 1) WHERE col1 = [var2]

反对

<强>2。将逻辑分为两部分,应用程序检索 SELECT 结果集并执行简单的 INSERTUPDATE之后删除

例如(我正在使用一些伪代码):

def ids_to_delete = fetch('SELECT col5 FROM table2 WHERE col1 = [some_variable]')
execute('DELETE FROM table 1 WHERE col1 IN(' . implode(',', ids_to_delete) . ')')

for (var1 in vars)
    def val_to_insert = fetch('SELECT col5 FROM table2 WHERE col1 = [var1]' LIMIT 1)
    execute('INSERT INTO table 1 VALUES [varX.a], [varX.b], [varX.c], [val_to_insert], [varX.d]')
endfor

等等

哪种方法性能更好?我认为第一种方法应该更快,因为从应用程序代码到应用程序数据库只有一个链接,尽管有些子查询可能不会那么快。我很好奇没有具体的 SQL 实现和没有具体的应用环境(如果可能的话)的一般性能。

最佳答案

以最少数量的 SQL 语句执行操作几乎总是正确的方法,不仅是出于性能原因,而且因为保证操作是原子的并且具有单个一致性点。

关于MySQL 和 ORACLE 性能 - SELECT + 检索行 + DELETE 与 DELETE WHERE SELECT FROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20611021/

相关文章:

php - 从一个表中获取值,将其插入到其他表的查询中。如何?

performance - ="100%"和 left ="0"right ="0"哪个性能更好?

MySQL 有些查询永远不会执行

c# - Entity Framework 搜索相似或相等

oracle - 如何检查表中是否有带有主键值的记录?

mysql - 按列计算 SQL 出现次数

php - mysql 值按日期排序,但此列类型不是日期类型

mysql - 从两个表中选择值

c# - 分配字节数组对性能至关重要吗?

linux - 如何编写shell脚本将查询结果输出到文本文件