5000万件の乱数記録、どのように重複を取り除きますか?


今日、お客様の要求を受けて、26文字の大文字と英語のアルファベットに8文字(0と1を除いて、アルファベットのI/Oに似ているため)を加えて11桁のランダム文字列を生成しました.繰り返してはいけません.(お客様は飲料を生産する企業で、文字が瓶の蓋に打たれて、抽選用)
見た目は簡単ですが、肝心なのは5300万本です.
ステップ1:javaでランダムコードを生成し、DBに挿入し、1000件を1回提出し、プロセス全体に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();
   }
}

ステップ2:重複データを削除します.
1、本来はselect文で重複データを検索して削除することを考えていた.
select distinct(code) from a2 t group by code having count(code) > 1;

その後、この方法があまりにも無邪気であることに気づき、5300万件のデータを数分待ってから、Cancelしました.
DBAに教えてもらい、md 5アルゴリズムを使うことをお勧めします.そうすると、結果が繰り返されないことを保証できます.しかしmd 5は暗号化された結果が長く、32ビットのようですが、私のお客様は11ビットのものを望んでいます.
その後、DBAは別の方法を提案し、一時テーブルを再構築し、元のテーブルの中の非重複データを選択し、一時テーブルを挿入します.

insert into a1 (select distinct code from a2);

やはり5分足らずで、実行は終了.
終了後a 1表の記録総数:52999665を見て335件の重複記録を除いた.
ステップ3:データをエクスポートします.
プログラムを書いてtxtファイルに導いて、何も言うことはありませんが、少し遅いです.(本当はexcelに保存したかったのですが、残念ながらsheetごとに65536本しか保存できませんでした..!)
個人的な感覚はもっと良い方法があるはずです.特にランダムコードを生成しています.重複しないレコードを直接生成する方法があればよい.