본문 바로가기

전체 글

(278)
[ SQL ] 스칼라 서브쿼리의 특성 스칼라 서브쿼리 Select Column List절에 사용된 서브쿼리 특성 1. 최대 결과 건수만큼 반복적으로 수행된다. "최대" 반복 수행 되는 횟수는 SQL의 결과 건수이다. Deterministic 속성을 가지고있다. 동일한 입력 값에 대해 결과 값이 항상 같다는 것을 보장한다. 2. 추출되는 데이터는 항상 1건만 유효하다. 추출되는 데이터가 1건을 초과한다면, "ROWNUM
[ SQL ] 서브쿼리를 활용한 SQL 성능개선 1. 비효율적인 MINUS 대신 NOT EXISTS를 사용하기 MINUS : 어느 한 집합에 있는 데이터 중 다른 집합에 존재하지 않는 데이터를 추출하는 방식 MINUS를 사용한 SQL이 성능 문제가 발생할 경우, SQL을 변경하지 않고, 성능을 개선하기가 쉽지않다. 차 집합을 추출하기 위해서는 MINUS 연산보다 NOT EXISTS 가 더 효율적이다. ex ) --MINUS select... from A MINUS select from B --NOT EXISTS select... from A where NOT EXISTS ( select... from B where B.XX = A.XX ) 위와 같은 2개의 쿼리문 실행시, MINUS의 경우 테이블 A 데이터 추출 -> 추출된 데이터 SORT 연산 ->..
[ SQL ] B-Tree 와 Index B-Tree, B-+Tree 란? ( Balanced Tree ) - 2진 트리의 확장, 리프 레벨의 좌우 균형을 유지 - 세 가지 종류로 나눠지며, 일반적인 DBMS에서는 주로 B-+Tree와 B-*Tree를 사용 - B-트리의 창시자인 루돌프 바이어는 ‘B’가 무엇을 의미하는지 따로 언급하지 않았다. 가장 가능성 있는 대답은 리프 노드를 같은 높이에서 유지시켜주므로 균형잡혀있다는 뜻으로 (balanced)의 B라는 것이다. 혹은, 그가 일했던 보잉 과학 연구소(Boeing Scientific Research Labs)에서의 ‘B’를 의미하는다는 의견도 있다. B-Tree 2진트리는 자식노드가 2개다 하지만, B-Tree는 자식노드의 최대숫자가 2보다 크다. ( 키가 n개 있으면, 이 노드의 자식은 n..
[ SQL ] 서브쿼리 동작방식 이해하기 Filter, Join 동작방식 이해하기 [ 서브쿼리 동장방식 ] 1. FILTER 동작방식 Main SQL에서 추출된 데이터 건수만큼 서브쿼리가 반복적으로 수행되며 처리되는 방식 ( 특징 ) Main SQL의 추출 결과가 많고, 서브쿼리에 제공해 주는 값의 종류가 많다면, 성능이 좋지않다. Main SQL의 추출 건수가 적거나, 추출결과가 많다 하더라도 서브쿼리에 제공해 주는 값의 종류가 적은 경우 성능이 양호하다. 항상 Main SQL이 먼저 수행되며, 서브쿼리는 Main SQL에서 추출된 데이터의 값을 전달 받아 매번 확인하는 형태로 수행된다. 서브쿼리가 Filter 동작방식으로 수행되는 경우 SQL의 성능이 좋지 않은 경우가 대부분 2. JOIN 동작방식 Filter 동작방식과 비교 하였을때, 가..
[ SQL ] 서브쿼리에 대한 기본내용 이해하기 이 글은 'SQL 튜닝의 시작' 이란 책을 읽고 내용을 정리하는 글입니다. [ 서브쿼리 기본개념 ] ( 서브쿼리란 ? ) where 절에 비교조건으로 사용되는 select 쿼리 ( 특징 ) 장점 : SQL 작성시에 모든 테이블을 join으로 작성하는 것보다 메인 집합을 만들고 서브쿼리를 사용하여 값을 비교하는 절차적 SQL 작성이 비교적 간편하다. 단점 : 하지만, join으로 처리가 가능한 SQL임에도, 서브쿼리를 남용할 경우 Optimizer가 최적화 과정에서 잘못된 Cost 계산을 하는 경우가 발생하여 DB 서버에 치명적인 성능 문제가 발생할 수 있다. [ 서브쿼리 사용패턴 ] ex 1 ) select * from emp where sal > ( select AVG (sal) from emp ) :..
[Spring] Thymeleaf 주 사용문법 th:text 화면에 값 출력시 사용 th:if 조건문 error th:errors 해당 value에 error가 있는경우 출력 th:action form 태그 사용 시, 해당 경로로 요청을 보낼 떄 사용 th:object form submit을 할때, form의 데이터가 th:object에 설정해준 객체로 받아짐 th:field 각각 필드들을 매핑을 해주는 역할, 설정해 준값으로 th:object에 설정해 준 객체의 내부와 매칭
[DB] ORM ( Object Relational Mapping ) ORM ( Object Relational Mapping ) 객체 관계 맵핑 장점 객체 지향적 코드로 직관적이고, 긴 SQL 문장이 없이 표현할 수 있다. 유지보수가 편하다. DBMS 에 대한 종속성이 줄어든다. 단점 설계가 어려우며, 완벽한 ORM만으로 구현하기 어렵다. 복잡한 프로젝트의 경우 유지보수가 어려워지게 된다.
[mssql] Clustered(클러스터), NonClustered(넌 클러스터) Clustered 테이블에 하나만 생성될 수 있다. ( 데이터가 정렬되어야 한다는 조건이있기때문에 ) 테이블을 인덱스로 지정한 열에 맞춰서 자동정렬 된다. ( 물리적으로 재배열 ) 하나의 클러스터 인덱스만 생성할 수 있으므로, 신중하게 생성하여야 한다. PK로 검색하기 때문에 검색 속도가 빠르다. insert, delete 가 빈번한 컬럼은 클러스터를 잘 사용하지 않는다. NonClustered 테이블 당 여러개 생성가능 테이블을 재배열 하지 않는다. 저장 공간이 많이 소요되고 구조가 복잡하다는 단점이있다.