我們需要每秒高於100個並發表的請求數。mySQL表更新併發性能
它是一個包含一堆唯一鍵碼的表格,它們在被請求時被分配一個request_guid。
該表包含整數主鍵,唯一鍵碼和空request_guid。
我們正在運行下面的查詢,它的工作原理與OK 10,000條記錄,但隨着100萬個+把它記錄嘎然而止,並在每次更新需要16+秒。
表:
(id INT
keycode VARCHAR(50)
request_guid VARCHAR(45) NULL)
* Concurrant查詢:
UPDATE coupon
SET request_guid = ?
WHERE request_guid IS NULL
ORDER BY RAND() LIMIT 1;*
的RAND()的訂單正在使用,否則我們得到的鎖定問題,當在同一行正試圖同時更新。
任何人都可以想到一個更好的方法來做到這一點,以提高性能?鑰匙可能應該放在單獨的桌子上?
我希望以上是有道理的,謝謝你的幫助!
乾杯,
˚F
您不需要在更新表格時執行排序,基本上,您正試圖將所有NULL request_guid更新爲特定值。你可以刪除'ORDER BY RAND()LIMIT 1'。 –
這表明你沒有索引。在查詢上運行EXPLAIN PLAN並查找TABLE SCAN。如果你看到一個,你就知道你錯過了一個索引。這將不會掃描您的表添加行。爲什麼在插入行時不添加請求guid?我不明白更新的要求。 – duffymo
如果您的代碼正常工作,並且您正在尋找更高效的代碼,那麼我會考慮更多的代碼審查問題。 –