我的問題目前有點含糊,因爲我不確定我應該在網上發佈任何公司代碼或任何東西。但是在這裏。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