mysql 중복제거 쿼리 질문입니니다.

mysql 중복제거 쿼리 질문입니니다.

QA

mysql 중복제거 쿼리 질문입니니다.

본문


 
sql_query("DELETE A FROM g5_write_db A, g5_write_db B WHERE A.wr_id > B.wr_id AND A.wr_1 = B.wr_1");
 

 

전화번호를 ajax로 중복체크하였으나, 그럼에도 글을 남기는 사람들이 있더라구요ㅡ,,

 

그래서 

 

 

모든글이 써지고 해당 쿼리를 통해 중복번호를 지우고 최신 번호만 남겼었는데요..

 

db가 1000개가 넘어가니 시간이 상당히 오래 걸리네요....

 

이부분을 최적화 할수 있는 방법이 있을까요? ㅠㅠ

 

 

이 질문에 댓글 쓰기 :

답변 1

수행될때

full search 를 하기때문에 느려집니다.

 

빠르게 개선하려면

부분쿼리로 변경하되

조건이 index가 걸리도록 변경해야 빨라집니다.

 

먼저 g5_wirte_db 테이블에

 

wr_1 에 인덱스를 생성쿼리를 실행하시고,

 

create index write_db_wr1 on g5_write_db(wr_1);

 

위의 쿼리를 아래와 같이 변경해보세요

 

 

DELETE A FROM g5_write_db A

where exists (select 'x' from g5_write_db B

                 WHERE A.wr_id > B.wr_id

                    AND A.wr_1 = B.wr_1);

 

 

 


 

허허.. 쿼리가 실행된줄알앗는데,, 저말고 다른사람이 수동으로 지웠다고하네요.. 타이밍 좋게.. 쿼리가 실행된줄알았는데..

sql_query("create index write_db_wr1 on g5_write_db(wr_1) ");
   
sql_query("DELETE A FROM g5_write_db A where exists (select 'x' from g5_write_db B WHERE A.wr_id > B.wr_id AND A.wr_1 = B.wr_1)");


이렇게 적용했는데 실행이 안되나봐요..

 
쪽지로 보내드렸듯이

삭제쿼리 자체는 문제가 없습니다.


create index는 db툴을 이용해서 혹은 터미널 창에서
db에 접속하셔서 직접 1회만 수행하시고

그외의

자유게시판을 예로
SELECT * FROM g5_write_free a
WHERE EXISTS (SELECT 'x' FROM g5_write_free b WHERE a.wr_id > b.wr_id AND a.wr_parent = b.wr_parent)

를 수행하면 정상적으로 잘 수행됩니다.

(당연히 어느정도 작성된 글은 있어야 확인 가능하겠죠)

답변을 작성하시기 전에 로그인 해주세요.
전체 1,506
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT