我正在尝试使用以下收据生成评级位置表
Assign places in the rating (MySQL, PHP)
但是我的数据库是高负载的。
我尝试不创建表,但使用MEMORY TABLE并使用以下SQL查询更新它
插入tops(uid)通过exp desc从用户订单中选择uid;
但得到以下MySQL错误
尝试锁定时发现死锁;尝试重新启动交易
因为在执行SQL select之前查询太多。
如何解决这个问题?
P.S。 CREATE TABLE tops as SELECT 工作几乎没有,除了高服务器负载...最高负载平均值:50如果tops是非内存表。
我的桌面用户有近450万行。
感谢您的任何建议。
答案 0 :(得分:0)
450万行是很多插入来做一个选择。我认为一个好的方法是编写一个脚本,以块的形式提取用户表数据并进行批量插入。
答案 1 :(得分:0)
如果需要高并发性,可以使用InnoDB
代替内存表。
InnoDB
支持行级锁定和 MVCC (多版本并发控制),我认为这就是您所需要的。 Memory
和MyISAM
会更快(插入/更新时),但如果您经常遇到死锁,那么InnoDB
就可以了。
如果InnoDB在高负载期间为您提供性能问题,则很可能是由于索引碎片和页面拆分太多。您可以通过定期执行ALTER TABLE innodb_tbl_name ENGINE=InnoDB
来解决此问题,这将重建表并因此索引以获得最佳性能。