场景:
项目中导入excel表,在处理excel表的过程中,身份证这个字段是需要唯一的,所以在处理excel的时候,需要对这个字段进行数据库中进行查重,看是否存在。但是项目中的这张表有近90万条记录
我想了半天都没有一个效率特别高的办法:
方法一: for循环里面查
for(...){
// for循环里面查
select * from user where idCard = ? limit 1
}
但是这样效率会很低,因为每次都要去连接数据库,再查,效率太低,淘汰
方法二:全部查出放内存中,然后内存中for循环比较
但是由于数据量太庞大,放在内存中很不现实
方法三:使用in,先将excel表中的身份证收集起来,然后拼接字符串
select * from user where idcard in (?, ?, ?, .....) limit 1;
但是这样有一个问题,就是in 后面括号中的身份证数量太多了,就算给idCard加了索引也没有用,
还是走全表扫描,效率依旧很低。
有大佬知道有什么比价高效快速的方式解决这个问题吗?想了很久了还是没有特别好的方法。
每条记录存一个身份证号,一个主键id,约么30B的数据,100万条也就30M左右。
excel数据量也很大的话,肯定是放内存中比较最快,弄个内存数据库就是。