目前,我们有一个票务管理系统,就像所有票务系统一样,它需要以循环方式将情况分配给座席。同时,代理可以应用自己的过滤逻辑并在其队列中工作。MySql逻辑优化
问题,
- 表与门票现在是非常大的,跨越超过1000万行。
- 一张票不应该分配给两个不同的用户。
- 为了解决上述问题,这是我们拥有的流量,
- 选择查询与过滤条件解雇,限制0,1
- 上述查询返回的行然后可以将选定基于ID和锁定更新。
- 最后我们开始更新,说用户X选择了这个案例。
- 虽然第3步执行其他用户无法获得相同的情况下锁,所以他们发射3.查询可能会多次获取下一个可用的情况。
- 随着用户数量的增加,在步骤4中这个时间越来越高。
我们尝试在第4步本身的查询中进行select更新,但它使整个查询变慢。假设这是因为select查询中有大量的行。
问题,
- 是否有不同的方法,我们需要完全承担?
- 会在存储过程中进行选择和更新以确保与选择更新然后更新相同的结果?
P.S - 我问了同样的问题stackexchange。
是否需要锁定该行。你也可以在没有锁的情况下执行它:通过SELECT读取一行并获得旧用户,并在UPDATE处添加条件WHERE ... AND user = old_user。所以如果更新一行,那么所有其他进程都可以获得这张票 –