快速检查大型sql表中的重复项

时间:2018-01-24 15:24:59

标签: mysql sql

我有一个包含超过200,000行的大表,在插入新行之前,我只需要检查最后几千行的重复项(不是全部)。目前我正在为我要添加的每一行运行此查询:

.all()

根据该查询的响应,如果响应为空,我会写入该行。

我这样做的问题是它需要很长时间,而且随着数据库的增长,这只会增加所需的时间。

我尝试使用SELECT ID from table where date='' and time='' LIMIT and OFFSET我认为只会在200,000之后搜索行到数据库的末尾,但运行此查询似乎没有更快。

我的问题是:是否有更有效的方法在数据库中“跳过”而只搜索部分行而不是所有行?

1 个答案:

答案 0 :(得分:1)

您应该使用INSERT IGNORE,并根据应该唯一的列在表上使用UNIQUE约束。

使用INSERT IGNORE时,MySQL会自动检测该行是否唯一,并忽略进入数据库的条目。有关详细信息,请参阅this question

此外,只要您在表上拥有正确的索引,搜索数百万行数据库应该很快。您不需要搜索数据子集(没有键,数据库将被强制执行行扫描,这可能会导致您正在谈论的延迟)。