MySQL 에서 중복데이터가 있는 컬럼들에 unique index 만들기.
글쓴이: 망치 / 작성시간: 목, 2009/11/26 - 5:29오전
컬럼 몇개를 조합해서 unique index 로 잡으려고 하는데 이미 중복 데이터가 많이 들어가 있는 상태라
중복데이터를 먼저 정리해야 하는 상황입니다.
근데 이게 데이터가 많다보니 하나하나 찾아내서 중복되는것들을 삭제하면서 시도하려니 시간이 너무 오래걸리네요.. DB 부하 자체도 심하구요.
간단히 중복데이터들은 유일하게 한 행만 남기도록 하고, unique index 를 생성할 방법 없을까요?
Forums:


큐브리드 게시판에
큐브리드 게시판에 비슷한 논의가 있네요
http://www.cubrid.com/zbxe/?mid=bbs_developer_qa&page=3&document_srl=45181&sort_index=readed_count&order_type=desc
참고해봐야겠슴다
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
빈 테이블을 만들고
빈 테이블을 만들고 unique index 를 미리 건 후
insert into newtable select * from oldtable;
하면 되지 않을까요?
혹시 중복시 거기서 그냥 멈춰버린다면,
해당 테이블을 덤프 떠서 INSERT 문으로 만들어주면 될겁니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
mysqldump 로 원본
mysqldump 로 원본 테이블의 덤프를 떠서 덤프파일에서 중복된 값을 제거한 뒤 INSERT 하라는 말씀이신가요?
중복시 멈춰버린다면.. 까지는 이해가 되는데 해당 테이블을 떠서 INSERT 문으로 만들라는게 잘 이해가 안되서요;
mysqldump 를 이용해서 INSERT 문으로 된 SQL 파일 까지는 만들었는데 이걸 어떻게 해야 할지 모르겠어요.
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
http://dev.mysql.com/doc/refm
http://dev.mysql.com/doc/refman/5.0/en/create-index.html
위 페이지에서 저런걸 찾았습니다.
중복값이 있더라도 일단 인덱스 생성이라도 강제로 하게 만드는 방법이 있네요.
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
unique index 가 이미
unique index 가 이미 걸려 있으면 중복값이 있어도 insert 되지 않고 다음으로 넘어갈거라는 것입니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
해봤는데 중복값이
해봤는데 중복값이 있으니까 INSERT 중에 그냥 멎어버리더라구요.
일단 위 방법대로 강제로 인덱스를 넣어둔상태에서 기존 중복데이터는 ... 흠.. 추후 처리 예정...입니다 ㅡ.,ㅡ; 신규 데이터에 대해서 일단은 중복 방지 대책이 만들어졌으니;;
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
저도 잘은 모르지만.. 최근 db연동하는걸 해서..
select로 가져올때
select distinct 컬럼 from 테이블 하시면 될거 같은데.. 중복된자료는 하나만 띄어주는거요..
일단.. distinct 는 컬럼
일단.. distinct 는 컬럼 하나만 가능한지라 좀 힘들것같아요
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
이렇게 하면
이렇게 하면 되겠네요.
select * from table1 as aa
where NOT EXISTS
(select * from (select col1, col2, ..... from (select * from table1 order by col2 desc) a group by col1) as bb where aa.col1=bb.col1 and aa.col2=bb.col2 and ..... )
이 쿼리는 col1 값을 기준으로 제일 큰 col2 값을 제외한 나머지 결과만 가지고 오는 쿼리입니다.
즉, 제일 위의 select 를 delete 로 바꾸는 것으로, col1 기준으로 중복값을 하나만 남기고 모조리 삭제가 가능하죠 ^^;
큐브리드 쿼리는 큰 도움이 되지 않을것입니다.. 큐브리드 전용 쿼리라서요...
당연한 소리지만, 위 쿼리도 group by 의 mysql 특성(^^)을 이용한 쿼리라서 다른 DBMS에서 적용은 어려울것입니다.
-------------------------------------
김동수 - Prototype for Evolution
김동수 - Prototype for Evolution
select * from table1 as
select * from table1 as aa where NOT EXISTS ( select * from ( select col1, col2, ..... from ( select * from table1 order by col2 desc ) a group by col1 ) as bb where aa.col1=bb.col1 and aa.col2=bb.col2 and ..... )감사합니다.
아직 실행은 못시켜봤는데.. 말씀하신 mysql 의 group by 의 특성이 어떤건가요?
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
원래 group by 를 하면
원래 group by 를 하면 grouping 되지 않은 필드는 선택할 수 없습니다.
I J
1 a
1 b
2 c
2 d
3 e
3 f
select I, J from table group by I
하면 J 에 어느게 오게 될지 명확하지 않아서 안되는 거죠.
근데 MySQL 은 됩니다.-_-;
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
그렇군요! 감사합니다
그렇군요!
감사합니다. ㅎㅎㅎㅎ
---------------------------------------
http://www.waitfor.com/
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/