2013-12-16 60 views
2

我正在經歷一些當前應用程序的性能改進,我正在考慮下一個場景中哪些性能更​​好(考慮好服務器硬件,或者忘記硬件)。MySQL和ORACLE性能 - SELECT +檢索行+ DELETE與DELETE WHERE SELECT FROM

考慮你需要做一個update,insertdelete與需要從其他表格中提取的特定信息。哪種情況會有更好的表現?

編輯:因爲在這種情況下,性能問題是高度(平臺|供應商)專用,我很好奇,更多關於MySQL的 ORACLE DBMS ...

1。僅由SQL完成工作
eg (所有查詢都只是假設):

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結果集被應用程序和p檢索事後簡單地執行INSERT,UPDATEDELETE

例如(我用一些僞代碼):

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實現並且沒有具體應用環境(如果可能)的一般性能感到好奇。

+0

什麼是您的理想衡量表現?網絡利用率? DBMS負載?完成操作所用的總時間? – Tim

+1

性能是**高度**特定於平臺的,SQL只是許多數據庫系統使用的查詢語言。你需要告訴我們你使用的具體數據庫**(以及它的哪個版本!)是MySQL嗎? Postgres的?甲骨文? IBM DB2? Interbase的? SQL Server?還有什麼??請相應地更新您的標籤! –

+0

@marc_s我認爲這可以一般回答。如果我問什麼更適合MySQL,ORACLE,SQL Server,PostGres,DB2?你會把我的問題標記爲*太寬*嗎? – shadyyx

回答

2

在最少數量的SQL語句中執行操作幾乎總是正確的方法,不僅出於性能原因,而且因爲操作保證是原子性的並且具有單個一致性點。

相關問題