데이터베이스

데이터베이스/RDB

[SQL] Insert 시 중복 데이터 처리

배경 사내 업무 중 테이블 여러 개 join 후 SELECT를 하여 특정 테이블에 insert 해야 하는 상황이 나왔는데 이때 중복된 데이터 즉 이미 들어가 있는 데이터는 중복처리를 해야 하는 상황이 왔다. 해당 테이블에 PK가 데이터를 구분할 PK는 아니였기 때문에 관련 정보를 찾아봤다. 방법 index 설정 먼저 index를 설정하여 중복을 피하는 방법인데 PK를 설정하거나 UNIQUE INDEX를 설정한다. ALTER TABLE TableName ADD PRIMARY KEY (Column Name..) ALTER TABLE TableName ADD UNIQUE INDEX (Column Name..) ignore 말그대로 중복된다면 무시한다. 즉 insert를 하지 않는다. 이때 중복을 구분하려는 칼..

데이터베이스/RDB

[MySQL] 인덱스를 활용한 Join 성능 개선

현상 여러 테이블을 Join 하여 Select을 했는데 꽤 오래 걸려서 쿼리를 분석하기위해 explain 을 쿼리앞에 붙혀서 실행했다. 결과로 rows 값이 비정상적으로 많은 테이블을 발견했다. extra를 확인해보니 Using join buffer(Block Nested Loop)라는 내용이 있었다 원인 Using join buffer(Block Nested Loop) 의 의미는 조인에 적절한 인덱스가 없어 조인 버퍼를 이용했음을 뜻하는데 결과적으로 테이블 조인 조건을 PK와 달리 인덱스가 없는 컬럼에 걸어서 오래 걸렸던 것이다. 해결 CREATE INDEX 인덱스이름 ON 테이블이름 (필드이름1, 필드이름2, ...) 해당 컬럼에 인덱스를 추가하여 다시 SELECT 해본 결과 성능이 개선됐다. 하지만..

옥탑방고래
'데이터베이스' 카테고리의 글 목록