2015-07-21 57 views
3

哪種操作更昂貴 - 在INSERT之前發出SELECT查詢,或在INSERT操作期間處理異常?在插入或插入異常之前,我應該檢查一個鍵是否存在?

例如,假設我想要堅持某些用戶請求參數說param1(主鍵&唯一索引),param2param3到數據庫表的要求顯示通知,如果一個重複的鍵已經存在。此外,假定整個過程預計不會超過500毫秒的實時情況。

爲什麼經常建議爲三個參數執行插入語句,然後處理插入異常以迎合重複?我知道拋出異常有成本 - 數據庫查詢的成本是否超過拋出異常的成本?

+0

您可以使用A vs B代碼示例更清楚地說明此問題。即使修改後,我也無法用代碼描繪你想要描述的內容。 「將參數保存到數據庫」是什麼意思?將它們插入表中? –

+0

爲什麼你不這樣做?儘可能防止異常,並在可能時處理異常,都是良好的做法。 – overslacked

+0

你期望嘗試插入重複的頻率如何?表格是否正確索引? – shawnt00

回答

-1

如果我插入1,000,000次並首先檢查然後插入,即1,000,000個檢查並說出957,512個插入總計 1,957,512針對數據庫的操作。我仍然需要做的一些事情就是通知用戶每個沒有初始檢查的42,488條記錄。

如果我插入並拋出異常,我對數據庫有1,000,000個操作,需要處理的異常有42,488個。

因此,做生意的第一種方式是在更多的數據庫上工作。

+0

我已經低估了這個,因爲沒有任何關於檢測重複主鍵與處理異常的有效時間的度量標準,我不認爲這個答案是有用的。我強烈希望檢測重複數據的性能要高得多,因爲它使用的是數據庫系統,因爲它是爲了使用而設計的,異常處理的代價非常昂貴。 – overslacked

+0

@HLGEM我同意overslacked。性能如何比較? –

相關問題