다음과 같은 관계에서 사용자가 비밀번호를 변경할 때 최근 사용한 N개의 비밀번호와 일치하는지 확인하는 로직은 어떻게 구현할까? 아래와 같이 결과집합을 뽑아서 애플리케이션에서 비교하거나, 한단계 더 쿼리를 감싸 과거 비밀번호와 변경할 비밀번호를 비교할 수 있다.@Transactional method{select * from (select * from password_his where user_id = :user_id order by rev desc)where rownum 하지만 스프링은 멀티쓰레드 방식으로 클라이언트 콜을 받기 때문에 두 개이상의 비밀번호 변경 요청이 들어온다면 첫번째로 처리한 요청은 정상적으로 비밀번호를 비교하고, 변경할 수 있지만 그 다음에 들어오는 요청들은 별도로 처리해야한다. ..
인덱스와 DML 성능INSERT, DELETE 인덱스는 정렬된 자료구조이므로 자리를 찾아가서 작업해야한다.UPDATE 변경된 컬럼을 참조하는 인덱스만 찾아서 변경하면 된다(인덱스에 포함된 정보가 변경됐을 때만)하지만 이 경우는 정렬을 맞춰줘야하기 때문에 이전 인덱스 정보 삭제 후 삽입하는 두 개의 오퍼레이션 발생한다. 무결성제약과 DML 성능PK, FK 제약은 Check, Not Null 과 다르게 실제 데이터를 조회해봐야하기 때문에 성능에 더 큰 영향을 미친다. Redo 로깅Redo 로그는 트랜잭션 데이터가 유실됐을 때 트랜잭션을 재현함으로써 유실 이전 상태로 복구하는데 사용 Redo 로그의 용도는 아래와 같다.Database Recovery물리적으로 디스크가 깨지는 Media Fail 발생시 데이터베..
SQL의 실행과정을 아십니까..? SQLD를 공부할 때까진 이것만 생각했었습니다. 하지만 친절한 SQL 책을 읽으면서 DBMS에 쿼리를 날리면 어떤 과정을 통해 결과집합을 얻는지 배울 수 있었습니다. sql 실행 과정우선 SQL은 절차적인 언어가 아닌 Structured Query Language로 구조적 질의 언어입니다. 원하는 결과집합을 구조적으로 질의하지만 결과집합을 만들어내는 과정은 절차적으로 수행해야하고 아래와 같은 과정을 거칩니다. SQL에 문법적, 의미상 오류가 없는지 체크하는 파싱최적화 하기 쉬운 형태로 쿼리 변환을 하고 다양한 후보군이 될만한 실행계획 생성 및 비용 계산 실행엔진이 실행할 수 있는 프로시저로 변환하는 과정프로시저 실행 후 결과반환 SQL 파싱원래 DBMS는 I/O작업을 많..