如何针对可能的重复条目优化Mysql INSERT操作?

时间:2016-10-28 12:08:39

标签: mysql node.js multithreading performance query-optimization

在我的NodeJs应用程序中,我使用线程(由我自己定义)来打开计算机中的端口。有一个限制,即每个端口只能绑定一个线程。

我在Mysql中维护一个表(PORTS),它保存有关开放端口和绑定线程的数据。目前我使用以下方法来避免两个线程绑定到同一个端口。

=>在端口号为PRIMARY KEY的PORTS表中插入一个条目。这将引发以下错误

error inserting semaphore port:10014 error Error: ER_DUP_ENTRY: Duplicate entry 'port:10014' for key 'NAME'

我捕获此错误然后尝试另一个端口,直到没有抛出错误。

这是一个好习惯吗?或者我应该先使用SELECT查询检查值是否存在,然后再检查INSERT条目? 注 - AFAIK在第二种方法中,SELECT和INSERT可以通过使用SQL事务作为原子操作运行。

1 个答案:

答案 0 :(得分:0)

假设你有多个'客户'试图同时获得'端口',你的第二种方法是不好的。这是因为不同的客户可以在SELECTINSERT之间潜入并抓住端口。

你的第一种方法更好,因为它是“原子的”。这是一个单一的动作,因此更快(不是速度是一个大问题)。