使用MySQL';s INSERT IGNORE以防止转储复杂条目(性能问题?)

使用MySQL';s INSERT IGNORE以防止转储复杂条目(性能问题?),mysql,database,Mysql,Database,我有一个表,其中保存了传感器的测量值。一行包含测量值、id(pk和自动递增)和一个随机数=num(大约10位或更长) 现在,经过几周/几个月后,表中可能包含成千上万行 我的问题: 我的系统要求随机数是唯一的(不接受具有相同随机数的两个或多个测量值/行)。 现在我已经做了一些研究,这里有一个简洁的INSERT-IGNORE语句。 但我不确定在我的情况下使用它是否明智,因为一段时间后可能会有很多行,并检查表中所有行的随机数,如果它与必须新插入的行匹配,那么一段时间后可能会过度使用,并严重影响性能 有

我有一个表,其中保存了传感器的测量值。一行包含测量值、id(pk和自动递增)和一个随机数=num(大约10位或更长)

现在,经过几周/几个月后,表中可能包含成千上万行

我的问题: 我的系统要求随机数是唯一的(不接受具有相同随机数的两个或多个测量值/行)。 现在我已经做了一些研究,这里有一个简洁的INSERT-IGNORE语句。 但我不确定在我的情况下使用它是否明智,因为一段时间后可能会有很多行,并检查表中所有行的随机数,如果它与必须新插入的行匹配,那么一段时间后可能会过度使用,并严重影响性能


有什么想法吗?

使用INSERT IGNORE命令而不是INSERT命令。如果一条记录没有复制现有记录,那么MySQL会像往常一样插入它。如果记录是重复的,那么IGNORE关键字会告诉MySQL以静默方式丢弃它,而不会产生错误。 并对随机数列使用唯一约束。用于在尝试从表中检索数据时提高性能,请为此创建索引


谢谢您的意见。但是,正如您在我的问题中所看到的,我已经使用了INSERT INGNORE语句。我也知道它是如何工作的。然而,我的问题是,在我的情况下使用它是否可行。我可以想象,如果我有一百万行,我可能会遇到严重的性能问题,然后每次插入时都必须检查重复项,这可能是非常常见的。(通过检查重复项,我的意思是使用INSERT IGNORE命令,因为我认为mysql必须跟踪可用条目,并在每次插入新条目时进行比较。)对此有何想法?
CREATE TABLE `table` (
    `id` int(10) UNSIGNED NOT NULL,
    `value` float NOT NULL,
    `num` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;