【发布时间】:2020-04-30 16:41:12
【问题描述】:
我需要帮助将我的 3 个查询优化为一个。
我有 2 个表,第一个有我使用的图像处理服务器的列表,因此不同的服务器可以同时处理不同的同时作业负载,所以我有一个名为 quota 的字段,如下所示.
第一个表名,“img_processing_servers”
| id | server_url | server_key | server_quota |
| 1 | examp.uu.co | X0X1X2XX3X | 5 |
| 2 | examp2.uu.co| X0X1X2YX3X | 3 |
如果此时服务器上正在执行作业,则第二个表注册
第二张表,“img_servers_lock”
| id | lock_server | timestamp |
| 1 | 1 | 2020-04-30 12:08:09 |
| 2 | 1 | 2020-04-30 12:08:09 |
| 3 | 1 | 2020-04-30 12:08:09 |
| 4 | 2 | 2020-04-30 12:08:09 |
| 5 | 2 | 2020-04-30 12:08:09 |
| 6 | 2 | 2020-04-30 12:08:09 |
基本上我想要实现的是我的图像服务器不会超过最大配额并崩溃,所以我想组合的 3 个查询是:
选择至少一个未达到其配额的可用服务器,然后为其插入锁定记录。
SELECT * FROM `img_processing_servers` WHERE
SELECT COUNT(timestamp) FROM `img_servers_lock` WHERE `lock_server` = id
! if the count is < than quota, go ahead and register use
INSERT INTO `img_servers_lock`(`lock_server`, `timestamp`) VALUES (id_of_available_server, now())
我将如何创建这个单一的查询?
我的目标是确保我的图像服务器不会过载。
【问题讨论】:
标签: mysql sql join group-by sql-insert