我在做一个PHP的新生报到的东西,我设置的一个宿舍可以住三个专业,每个新生都有自己的专业,根据专业住进不同的宿舍,宿舍最多住6个人,我想自动分配,先开启了事务,循环 从宿舍的第一个专业开始查看是否有匹配,没有则匹配第二个专业,以此类推,当找不到的时候跳出循环,找到以后用
UPDATE `Building` SET `ExistSum`=ExistSum+1,`version`=version+1 WHERE `ID` = 62 AND `version` = 0
然后判断是否更新完成,更新成功了,跳出循环,不成功就继续循环,
但是,我在测试的时候发现一开始还好,但是大概40个左右就会卡死,好像是因为行锁的原因,请教一下大家,有没有好办法优化下,测试是我用Python写的开了40个线程,读取队列,.每0.1秒访问一次,数据都是提前准备好的
表结构:
CREATE TABLE `Building` ( `ID` int(6) NOT NULL, `isdel` tinyint(1) NOT NULL DEFAULT '0', `Building` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, `DormNumber` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL, `Department` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `money` int(3) NOT NULL DEFAULT '800', `Sum` int(1) NOT NULL DEFAULT '6', `ExistSum` int(1) DEFAULT '0', `MainMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `SecondMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `ThiredMajorID` varchar(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `Sex` varchar(2) COLLATE utf8mb4_unicode_ci DEFAULT '男' COMMENT '真男假女', `remark` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `version` int(3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;