2011-05-11 46 views
1

假設我有一張有1000個記錄的表格,我只想更新一條記錄。如果我指定更多'WHERE'子句來縮小搜索範圍以減少可能的匹配記錄,或者更快地聲明一個WHERE子句(例如recordID),是否會使查詢更快?mySQL:最有效的方法來更新大型數據庫中的記錄?

實施例:

UPDATE table 
SET record_name = 'new name' 
WHERE record_ID = 'x' 
LIMIT 1 

UPDATE table 
SET record_name = 'new name' 
WHERE record_ID = 'foo' 
AND record_city = 'bah' 
LIMIT 1 

回答

5

假設RECORD_ID是主鍵,這絕對是更新單個記錄的最快方式。

+0

因此,指定更多識別事物不會加速查詢? – wilsonpage 2011-05-11 11:28:15

+0

如果您沒有通過索引列更新內容,它可以提供幫助 - 您的where子句越詳細,則需要掃描和更新的記錄越少。通過主鍵進行更新很容易成爲更新單條記錄的最快方式。 – 2011-05-11 12:11:26

1

如果record_ID是主鍵,則第一個解決方案是最快的。我認爲將「LIMIT 1」放入「LIMIT 1」並不是必須的,因爲它隱含在主鍵

1

值得注意的是,這兩個命令實際上在功能上也不相同。 您應該始終運行查詢,該查詢完成您想要執行的操作。

數據庫中的優化器將計算出來。 在這種情況下,即使您同時指定了兩者,也必須訪問行的位置以將其刪除,與首先導航到行相比,對列讀取額外的WHERE是一個很小的懲罰。

還要注意,使用沒有ORDER BY的LIMIT將會破壞序列化以複製和恢復二進制日誌,以便在STATEMENT模式下進行時間點恢復。

在這種情況下,最好在WHERE中指定所有需要的,而不需要LIMIT。

+0

你能顯示代碼嗎?什麼是關於序列化(有點失去了我)。我推測限制會加速查詢,因爲一旦發現查詢將停止並且不會查找任何更多匹配。 – wilsonpage 2011-05-11 13:12:35

相關問題