最快的插入方式,如果不存在,则在MySQL中获取id

时间:2011-03-05 10:19:46

标签: mysql performance optimization pdo lastinsertid

有这张桌子。

| id | domain |

id是主键。 domain是一个独特的密钥。

我想:

  1. 插入新域(如果尚未存在)。
  2. 获取该域的id
  3. 现在我这样做:

    INSERT INTO domains
    SET domain = 'exemple.com'
    ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)
    

    然后PDO::lastInsertId()获取id

    但关键是这个速度尽可能快,所以我会问:我能以更好的方式做到这一点吗?

2 个答案:

答案 0 :(得分:1)

除非有人另有说法,否则我说不,这是最好的方式

答案 1 :(得分:1)

此方法有副作用:“每次找到重复键时,自动增量ID增加1”。
当第一次使用exemple.com作为值运行查询时 它创建了条目。让我们再次重复该查询13次。在那之后你尝试使用xyz.com,你会惊讶地发现自动增加id = 2而不是15。

1 exemple.com
15 xyz.com
25 pqr.com
50 thg.com