重复键更新时插入比选择和插入更慢?

  • 本文关键字:插入 选择 更新 mysql
  • 更新时间 :
  • 英文 :


当表中有很多重复键时,'Insert on duplicate key update'比'select& Insert '慢?

create table names
(
id         bigint unsigned auto_increment,
`name`     varchar(255) NOT NULL,
primary key (id),
constraint uniq_name unique (`name`),
) ENGINE = InnoDB;

on duplicate update:

INSERT INTO names (`name`) VALUES ('name1') ON DUPLICATE KEY UPDATE `id`=`id`;

选择插入:

SELECT COUNT(1) WHERE `name`='name';

当count为0时:

INSERT INTO names (`name`) VALUES ('name1');

90%的简单查询是开销——跨网络发送、解析、优化、定位表中可能包含name = 'name'的部分、收集结果(例如& count")、发送结果(至少是成功/失败)等等。两次查询意味着对每个查询执行两次。

此外,COUNT可能比必要的更昂贵。如果没有以name开头的INDEX,则必须读取整个表。

如果name = 'name'有很多行,COUNT会告诉你有多少行,而你只需要知道是否有任何

你有UNIQUE name。在这种情况下,INSERT IGNORE是一个明显的赢家。

一般规则:到服务器的往返次数更少==>更快。