5000万条随机数记录,如何剔除重复?
今天接到客户那边一个需求,用26个大写英文字母加8个数字(去掉0和1,因为和字母里面的I/O相似)产生11位的随机字符串。不能有重复。(客户是个生产饮料的企业,字符打在瓶盖上,抽奖用)
看起来其实是蛮简单的,关键是要5300万条。
第一步:用java生成随机码,插入到DB,1000条提交一次,整个过程用了20多分钟。
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;public class RandCode {/** * 生成随机码,插到数据表中 * @param agrs */public static void main(String[] agrs){Connection conn = getConnection();try{ PreparedStatement stmt = conn.prepareStatement("insert into A2 values(?)"); String temp = ""; StringBuffer buf = new StringBuffer("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"); buf.append(",2,3,4,5,6,7,8,9"); String[] arr = buf.toString().split(","); for(int k = 0; k < 53000; k++){ for (int i = 0; i < 1000; i++){ temp = getPswd(arr); stmt.setString(1, temp); stmt.addBatch(); } stmt.executeBatch(); conn.commit(); System.out.println(k); } }catch(SQLException e){e.printStackTrace();}} public static String getPswd(String[] arr){ StringBuffer b = new StringBuffer(); java.util.Random r; int k ; for(int i=0;i<11;i++){ r = new java.util.Random(); k = r.nextInt(); b.append(String.valueOf(arr[Math.abs(k % 34)])); } return b.toString(); }}
select distinct(code) from a2 t group by code having count(code) > 1;
insert into a1 (select distinct code from a2);