Oracle大数据量去重实验

2017-01-04 19:29:24来源:作者:人点击

第七城市
[sql] view plain copy
  1. -- 环境:64位11.2G
  2.  
  3. -- 一、建立测试表,生成2000万测试数据,其中200万重复
  4.  
  5. CREATE TABLE test_t
  6. (
  7. id NUMBER (8) NOT NULL PRIMARY KEY,
  8. name VARCHAR2 (32)
  9. );
  10.  
  11. BEGIN
  12. FOR i IN 1 .. 18000000
  13. LOOP
  14. INSERT INTO test_t (id, name)
  15. VALUES (i, SYS_GUID ());
  16. END LOOP;
  17.  
  18. COMMIT;
  19. END;
  20. /
  21.  
  22. INSERT INTO test_t (id, name)
  23. SELECT 18000000 + (id / 9), name
  24. FROM test_t
  25. WHERE MOD (id, 9) = 0;
  26.  
  27. COMMIT;
  28.  
  29. CREATE INDEX idx_test_anme
  30. ON test_t (name);
  31.  
  32. ANALYZE TABLE test_t COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;
  33.  
  34.  
  35. -- 二、两种去重方案对比执行时间
  36. -- 方案1:建立中间表,生成辅助对象,删除原表,改表名
  37.  
  38. CREATE TABLE temp
  39. AS
  40. SELECT *
  41. FROM test_t a
  42. WHERE a.ROWID = (SELECT MIN (b.ROWID)
  43. FROM test_t b
  44. WHERE a.name = b.name);
  45.  
  46. -- 用时:08:14.79
  47.  
  48. CREATE INDEX idx
  49. ON temp (name);
  50.  
  51. -- 用时:02:45.73
  52.  
  53. ALTER TABLE temp ADD CONSTRAINT temp_pk PRIMARY KEY (id);
  54.  
  55. -- 用时:01:15.79
  56.  
  57. -- 总用时:12分16秒
  58.  
  59.  
  60. -- 方案2:直接删除原表中的重复数据
  61.  
  62. DELETE test_t a
  63. WHERE a.ROWID > (SELECT MIN (b.ROWID)
  64. FROM test_t b
  65. WHERE a.name = b.name);
  66.  
  67. -- 用时:2个小时没出来,中断退出。
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台