목록[Web]/[DB & Mybatis] (28)
요르딩딩

Table INNER JOIN LEFT JOIN RIGHT JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN = LEFT JOIN UNION RIGHT JOIN (MySQL에는 FULL OUTER JOIN 사용불가)
종종 개발하다보면 히스토리를 저장하는 테이블에 히스토리정보(변경할 정보)와 기존의 값을 저장 모두 저장해서 사용할 경우가 생깁니다. 예를들어, 사용자가 어떠한 조건에 있어서 2번 수정을 하게되면, 히스토리 테이블에는 2개의 레코드가 쌓입니다. 이때, 수정을 하게되면 기존값을 업데이트되어, 기존에 어떤값을 가지고 있었는 알 수 없게 됩니다. 기존 ["인터넷뱅킹": "T", "카드": "T", "이체": "T"] 1번 수정 ["인터넷뱅킹": "T", "카드": "F", "이체": "T"] -> 1번 수정전의 값을 알 수 없음 2번 수정 ["인터넷뱅킹": "T", "카드": "F", "이체": "F"] > 2번 수정전의 값을 알 수 없음 그리하여, jobb타입을 갖는 칼럼을 추가하여, 기존정보를 저장하여 보존..

이번시간에는 웹개발을 하며 Spring에서 주로 사용하는 DB Connection Pool에 대해서 알아보겠습니다. Java에서는 DataSource인터페이스를 통해 Connection Pool을 사용합니다. Connection Pool이란 WAS(web application server)가 실행될때 DB연결을 위해 Pool안에 미리 일정 갯수의 connection객체를 만들어두고, 사용자가 DB연결 요청을하면 Pool에서 생성한 connection 객체를 넘겨주고, 사용이 끝나면 반환받아 보관하는 기법입니다. 아래그림은 Connection pool의 동작과정입니다. Connection Pool 사용의 장점 1. 서버의 부하를 줄여줍니다. Java에서 DB Connection할때 부하가 많이 걸리는 작업..

옵티마이저란 사용자가 질의한 SQL문에 대해 최적의 실행 방법(실행계획: Execution Plan)을 결정하는 역할을 수행합니다. 옵티마이저가 최적의 실행방법을 결정하는 방식에 따라 - 규칙기반 옵티마이저(RBO, Rule Based Optimizer) - 비용기반 옵티마이저(CBO, Cost Based Optimizer) > 현재 대부분의 데이터베이스는 비용기반 옵티마이저만 제공 로 구분됩니다. - 규칙기반 옵티마이저 규칙(우선순위)를 가지고 실행계획을 생성합니다. - 비용기반 옵티마이저 규칙기반 옵티마이저의 단점을 극복하기 위해 출현했습니다. > 대안 계획 생성기 : 동일한 결과를 생성하는 다양한 대안 계획을 생성하는 모듈 > 비용 예측기 : 대안 계획 생성기에 의해서 생성된 대안 계획의 비용을 예..
prefix : 실행될 쿼리의 문 안에 쿼리 가장 앞에 붙여준다. prefixOverrides : 실행될 쿼리의 문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다. suffix : 실행 될 쿼리의 문 안에 쿼리 가장 뒤에 붙여준다. uffixOverrides : 실행될 쿼리의 문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다. batch_no, rec_type, rec_seq, ( batch_no, rec_type, rec_seq )
SELECT * 보다는 필요한 컬럼만 추출할것 (성능향상 27%) Having절 보다는 Where절 사용할것 (성능향상 31%) DISTINCT문 보다는 Primary Key이용할것 (성능향상 85%) 서브쿼리 보다는 JOIN문 사용할것 (성능향상 61%) (서비쿼리는 ANY, ALL, EXIST등이 사용되는1개의 테이블을 사용할때 권장) OR 보다 IN-List 사용할것 (성능향상 73%) (WHERE id = 14 OR id = 17 보다 WHERE id IN (14, 17) 사용) DISTINCT 보다 WHERE EXIST(서브쿼리) 사용할것 (성능향상 61%) (distinct는 모두조회한다.) UNION 보다 UNION ALL 사용 (성능향상 81%) (UNION ALL은 중복검사를 하지 않아 ..

인덱스의 장점과 단점에 대해서 알아보겠습니다. 인덱스는 색인이라는 뜻으로 책의 목차와 같은 느낌으로 생각하시면 됩니다. 이와같이 해당 부분을 찾을때 보다 쉽게 찾을 수 있도록 도와주는 역할을 합니다. 이제 본격적으로 DB를 활용하여 인덱스의 장점과 단점에 대해 알아보도록 하겠습니다. 위의 DB를 보면 회원테이블이 있고, 그에대해 '이름 인덱스', '주소 인덱스', '연락처 인덱스'가 있습니다. [장점] 먼저, 인덱스의 장점에 대해 알아보겠습니다. 위의 회원테이블에서 이름으로 조회(select)할시 이미 인덱스로 정렬되어있는 '이름 인덱스'를 활용하여 조회를 하게 됩니다. 정렬된 인덱스 데이터에서 해당 값의 주소값을 찾아 HDD(하드디스크)에서 주소값으로 해당값을 메모리로 끌어올리게됩니다. 때문에 회원테이..
1. select insert into select 후 insert 보다 > select insert into를 활용하여 디비접근을 최소화하면 실행속도를 높일 수 있다. INSERT INTO table2 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table1 WHERE condition; 2. mybatis의 태그 : insert 후 저장된 row 데이터의 auto_increment 키값을 가져와야 할때 참고 : yookeun.github.io/java/2014/07/11/mybatis-selectkey/ 3. 'EXPLAIN' 'EXPLAIN' 을 사용하면 쿼리를 실행하기전에 실행계획을 분석하여 출력한다. 출처..