当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle单表去重
发布时间:2010/8/23 11:09:28 来源:城市学习网 编辑:ziteng
  根据表的数量,去重可划分为单表去重和多表关联去重。
  对于去重,一般最容易想到的是用distinct,而distinct只能对完全重复的记录保留一条。distinct使用的是二重循环来去重的,如果数据量非常大的时候,会导致性能急剧下降。
  下面是一个单表去重的测试,认为name字段相同的即为重复记录,要查询出一个结果,过滤掉重复,distinct显然不能满足要求。
  表SQL:
  create table A_TEST
  (
  id     number,
  name   varchar2(20),
  remark varchar2(20)
  );
  insert into A_TEST (ID, NAME, REMARK)
  values (1, 'a', 'ss');
  insert into A_TEST (ID, NAME, REMARK)
  values (2, 'b', 'xxx');
  insert into A_TEST (ID, NAME, REMARK)
  values (3, 'b', 'x');
  insert into A_TEST (ID, NAME, REMARK)
  values (4, 'b', 'asd');
  insert into A_TEST (ID, NAME, REMARK)
  values (5, 'c', 'axxx');
  insert into A_TEST (ID, NAME, REMARK)
  values (6, 'c', 'asdf');
  去重方式一(低效):
  select a.*
  from A_TEST a, (select min(id) as id from A_TEST t group by name) b
  where a.id = b.id;
  去重方式一(高效):
  select *
  from (select a.*, rownum row_num from A_TEST a) x
  where x.row_num in (select min(rownum) from A_TEST t group by name)
  可见,使用rownum的效率比使用id的效率要高,当表数据量很大的时候,差距会很明显。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved