这是一个创建于 3501 天前的主题,其中的信息可能已经有所发展或是发生改变。
场景:
现在有比较多的频段(可以理解为商品,20k+个),每个频段可以X路(X>100且固定)无干扰复用(可以理解为一个商品有100+种不同使用姿势,姿势间互不干扰,对于同一个姿势每个商品只能被选择一次)。每次分配就是指 给定姿势和商品数量,选出商品。
请问如何设计表结构可以使得分配时的数据库查询开销最小?数据库是MySQL,机器是个低性能512M小VPS,每分钟至少一次分配,频段可增加。
目前我有两张表:商品表和分配表,其中分配表的每一项标定了哪一样商品的哪个姿势被分配给了谁。
当下正在使用的方案是:每次分配首先锁分配表,接着JOIN分配表和商品表,找出指定数量的商品,保证这些商品没有被以这个姿势使用过,添加商品到分配表中,最后解锁表。但是现在每次分配时间可能多达30秒(要求分配2k个,分配表仅有8w条数据)。
所以现在yy的另一个方案是:不再JOIN两张表,为每件商品安排一个虚拟姿势,并且在添加商品之后立刻分配。由此,每次有分配请求出现的时候,JOIN分配表自身,做查询。
请问第二种方案是否可行?第一种方案是否有大幅度优化的地方?是否有远胜于这两种的其他方案?
(暂时还没有查看前一种方案的瓶颈究竟在两表查询还是在INSERT上)
谢谢!