我正在对我正在开发的当前应用程序进行一些性能改进,并且我正在考虑接下来哪些场景的性能更好(考虑良好的服务器硬件,或者根本忘记硬件)。
考虑一下您需要对需要从其他表中获取的特定信息进行更新
、插入
或删除
。哪种场景会有更好的性能?
编辑:由于本例中的性能问题高度特定于(平台|供应商),因此我对 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
结果集并执行简单的 INSERT
、UPDATE
或 之后删除
。
例如(我正在使用一些伪代码):
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/