我試圖從表中刪除行時不斷收到這些錯誤。這裏的特例是我可能同時運行5個進程。刪除行導致鎖定超時
該表本身是一個約450萬行Innodb表。我在我的WHERE子句中使用的列沒有索引。其他指數正在按照預期工作。
它是在一個transcation內完成的,首先我刪除記錄,然後插入替換記錄,並且只有當所有記錄都被插入時,如果事務被提交。
錯誤消息:
Query error: Lock wait timeout exceeded; try restarting transaction while executing DELETE FROM tablename WHERE column=value
它是否有助於創建在這裏引用的列的索引?我應該顯式鎖定行嗎?
我在問題#64653中發現了一些其他信息,但我不認爲它完全覆蓋了我的情況。
確定它是DELETE語句導致錯誤,還是它可能是查詢中的其他語句? DELETE語句是第一個,所以它看起來合乎邏輯,但我不確定。
更新是不可能的。替換記錄可能會更少/更多。索引有什麼幫助?減少執行時間,反過來降低發生鎖定超時的可能性? – 2009-12-07 13:31:16
啊,我明白了。你考慮到減少執行時間。有450萬行,我猜你正在經歷一些緩慢的查詢。嘗試根據您的某個列標識運行示例select語句,以查看在沒有索引的情況下檢索記錄的速度。然後返回並添加索引並將其用於比較。如果該列是一個相當大的CHAR/VARCHAR,那麼只需使用索引的一部分字段即可減少一些開銷,即** CREATE INDEX partial_idx ON tableName(column(10))**僅使用前10個字符作爲您的索引值。 – 2009-12-07 13:40:47
這個變化很有效。謝謝! – 2009-12-07 14:18:18