SQL튜닝
트랜잭션 추가
로직 변경 및 쿼리 변경
새로운 브런치의 SQL과 로직을 변경했다. 전에 했던 작업은 반복문 2개를 하나의 결과로 바꾸어 insert와 update를 했는데, 이번 브런치는 3개의 반복문에 3개의 쿼리를 한개로 바꾸는 작업이였다. 하나로 합치고 데이터 가공이 된 상태의 쿼리를 만드는곳에서 잠깐 막히는 부분이 있었는데, 고민 후에 해결하여서 시간이 매우 단축되었다.
전에 실행한 결과로는 12시간 이상이걸려 실행하는것도 안되었는데 지금은 15분안에 실행이 가능하여 정확한 단축시간은 모르지만 매우 단축되었다. 시간 단축도 매우 중요하지만 CPU에 얼마나 부담을 덜 주냐도 데이터베이스 프로젝트에서 중요한 요소다.
각 브런치에 롤백과 코밋이 코드가 없어 추가하였다. update나 insert시에 만약 에러가 일어날 수 있기 때문에 반드시 롤백과 모든 처리가 끝난 후에 커밋을 해주어야한다.
왜냐하면 트랜잭션 처리를 안해준다면 에러가 일어나기전에 데이터는 등록되기 때문이다.
update인지 insert를 판단하기 전에, 리터럴 변수를 사용하여
select count('x') cnt from tableName where column1 = " ' + value + '"이런식으로 하여 `count >0이상인경우 update를 하고 아닌경우 insert를 하였는데, 이 부분을
select exists (select 1 from tableName where where column1 = ?) recordExist와 같이 한 후에 PreparedStatment에 set해주는 방식으로 바꾸었다.
단일 쿼리로 존재 여부를 확인하므로 Exists가 성능이 더 빠르다.
완전 DB 관리자여~ 멋져멋져