我们需要每秒高于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
如果您的代码正常工作,并且您正在寻找更高效的代码,那么我会考虑更多的代码审查问题。 –