[자격증] SQLD(SQL개발자)/↘ SQL 기본 및 활용19 [ SQLD ] SQL 최적화 기본 원리 - 3. 조인 수행 원리 [ SQLD ] 3. SQL 최적화 기본 원리 3-3. 조인 수행 원리 1. NL Join 하나의 테이블을 선행테이블로 정하고 조건을 만족하는 행을 찾은 후 나머지 후행 테이블에서 데이터를 찾는다. 선행테이블을 외부테이블이라 하고 후행테이블을 내부테이블이라고 한다. 힌트절 : /*+ ORDERED use_nl */ 방법 ① 선행 테이블에서 조건을 만족하는 행을 찾는다. ② 선행 테이블에서 후행 테이블에 조인 가능한지 인덱스를 찾는다. -> RANDOM ACCES 발생 ③ 후행 테이블에서 조건을 만족하는 행을 찾는다. ④ 만족하는 행을 추출버퍼에 넣는다.2. Sort Merge Join - 두 테이블을 정렬하고 병합하는 조인 - 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법 - 정렬을 이용하기 때문에.. 2020. 5. 30. [ SQLD ] SQL 최적화 기본 원리 - 2. 인덱스 기본 [ SQLD ] 3. SQL 최적화 기본 원리 3-2. 인덱스 기본 1. 인덱스 (Index) 원하는 데이터를 쉽고 빠르게 검색하는 방법 기본키는 자동으로 인덱스가 생성됨 테이블에 인덱스를 생성하지 않아도 되고 여러 개를 생성해도 된다. 인덱스 생성 CREATE INDEX 인덱스명 ON 테이블명(칼럼명); 1-1 ) 인덱스 구조 (트리 기반 인덱스) Root Block : 가장 상위에 있는 블록 Branch Block : 분기를 목적으로 하며 다음 단계 주소를 가지고 있는 블록 Leaf Block : 인덱스를 구성하는 칼럼의 데이터 , 행의 주소가 있는 레코드 식별자(RID, Record Identifier/Rowid)로 구성 2. 인덱스 스캔 (Index Scan) 2-1) 전체 테이블 스캔 (Inde.. 2020. 5. 30. [ SQLD ] SQL 최적화 기본 원리 - 1. 옵티마이저와 실행계획 [ SQLD ] 3. SQL 최적화 기본 원리 3-1. 옵티마이저와 실행계획 1. 옵티마이저 SQL을 실행 할 때 최적의 실행 방법을 결정하는 역할 똑같은 결과라도 효율적으로 실행하면 성능이 달라진다. 2. 옵티마이저 종류 2-1) 규칙기반 옵티마이저 옵티마이저를 결정 할 때 우선순위를 정해 놓은 규칙대로 실행계획을 생성하는 방법 우선순위 설명 1 Single row by rowid (ROWID를 통해 하나의 행을 액세스) 2 Single row by cluster join (cluster join을 통해 하나의 행을 액세스) 3 Single row by hash cluster key with unique or primary key (유일한 인덱스나 기본키를 가진 해시 클러스트 키를 통해 하나의 행을 액.. 2020. 5. 30. [ SQLD ] SQL 활용 - 7. DCL (Data Control Language) (데이터 제어어) [ SQLD ] 2. SQL 활용 2-7. DCL 1. DCL (데이터 제어어) - 테이블 사용자 권한 부여 명령어 GRANT : 권한부여 REVOKE : 권한회수 GRANT 권한 ON 테이블명 TO 유저명; REVOKE 권한 ON 테이블명 TO 유저명; 권한 설명 ALL 모든권한 부여 SELECT SELECT 권한 부여 INSERT INSERT 권한 부여 UPDATE UPDATE 권한 부여 DELETE DELETE 권한 부여 REFERENCES 참조 권한 부여 ALTER ALTER 권한 부여 INDEX 인덱스 생성 권한 부여 GRANT SELECT, INSERT ON 음식점 TO 승큐리티; -> 승큐리티 유저에게 음식점 테이블에 대한 SELECT, INSERT 권한을 부여한다. 2. WITH GRANT.. 2020. 5. 30. [ SQLD ] SQL 활용 - 6. 윈도우 함수 [ SQLD ] 2. SQL 활용 2-6. 윈도우 함수 1. 윈도우 함수 행과 행관계의 연산 SQL을 쉽게 정의하기 위해 만든 함수 SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ( [PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절] ) FROM 테이블 명; OVER 문구 필수 2. 순위 함수 (RANK Function) 2-1) RANK 함수 순위를 계산하는 함수 동일순위는 동일한 순위 값을 부여한다. SELECT 상호이름,메뉴이름, 음식가격, RANK() OVER (ORDER BY 음식가격 DESC) 비싼_랭킹 FROM 음식점; -> 5위가 없다. 2-2) DENSE_RANK 함수 동일한 순위를 하나의 순위로 생각한다. SELECT 상호이름,메뉴이.. 2020. 5. 30. [ SQLD ] SQL 활용 - 5. 그룹 함수 [ SQLD ] 2. SQL 활용 2-5. 그룹 함수 1. 그룹함수 합계나 평균값을 계산을 위해 SQL을 UNION, UNION ALL로 묶은 후 1개의 테이블을 여러 번 읽고 다시 재정렬 -> 복잡 그룹 함수를 사용하여 하나의 SQL로 테이블을 한 번만 읽어서 빠르게 원하는 계산 가능 2. ROLLUP 함수 GROUP BY 함수에서 Subtotal을 생성하기 위해 사용 SELECT 음식종류, SUM(음식가격) from 음식점 GROUP BY ROLLUP ( 음식종류); -> 음식종류별로 합계를 출력하라. 테이블 생성 소스 원하시면 댓글로 말씀 해주세요. 3. GROUPING 함수 소계된 결과에는 1을 출력 아닌 결과는 0을 출력 SELECT 음식종류, 메뉴이름, SUM(음식가격), GROUPING(메뉴.. 2020. 5. 30. [ SQLD ] SQL 활용 - 4. 서브쿼리 (Subquery) [ SQLD ] 2. SQL 활용 2-4. 서브쿼리 (Subquery) 1. 서브쿼리 (Subquery) 메인 쿼리문 안에 또 다른 쿼리문이 있는 것으로 서브쿼리라고 부른다. FROM구에 SELECT문을 쓸 때는 "인라인 뷰" 라고 부른다. 예를들어 한식집에서 메뉴와 음식가게의 평균적인 가격을 보고싶을때 사용한다. SELECT 음식명, 음식가격 , (SELECT AVG(음식가격) FROM 한식) FROM 한식; SELECT 메인쿼리 안 SELECT 서브쿼리를 사용했다. 빨간네모가 서브쿼리이다. 2. 단일 행 서브 쿼리 서브쿼리가 비교 연산자(=, =, )와 함께 사용할 때 결과 건수가 반드시 1건만 조회 3. 다중 행 서브 쿼리 서브쿼리가 비교 연산자(IN, ALL, ANY, EXISTS)와 함께 사용할.. 2020. 5. 29. [ SQLD ] SQL 활용 - 3. 계층형 질의 [ SQLD ] 2. SQL 활용 2-3. 계층형 질의 1. 계층형 질의 계층형 구조의 데이터를 조회 하는 것으로 트리형태의 계층형 구조를 위에서부터 아래로 탐색하는것 ※계층형 DB (트리구조, 1:N구조, 부모자식구조) 2. 오라클 계층형 질의 SELECT LEVEL,LPAD(' ', 3 * (LEVEL-1)) || 현재번호, 현재번호, 부모번호 FROM CON START WITH 부모번호 IS NULL CONNECT BY PRIOR 현재번호 = 부모번호; LEVEL : 깊이를 나타낸다. ROOT의 깊이 1부터 시작. 위 계층형의 최대깊이는 3이다. MAX(LEVEL) = 3 STAR WITH : 시작조건이며 ROOT를 지정한다. CONNECT BY PRIOR 자식=부모 : 계층구조에서 자식 → 부모방.. 2020. 5. 29. [ SQLD ] SQL 활용 - 2. 집합 연산자 [ SQLD ] 2. SQL 활용 2-2. 집합 연산자 1. 집합 연산자 조인을 사용하지 않고 두 개의 테이블을 조회하는 방법 제약조건 : SELECT 절의 칼럼 수 동일, SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입 상호 호환 가능 2. UNION 합집합 두개의 테이블을 하나로 합치면서 중복 데이터는 제거한다. 제거하면서 정렬과정을 거친다. SELECT 음식명 FROM 한식 UNION SELECT 음식명 FROM 야식; 2-1) UNLON ALL 두개의 테이블을 하나로 합치지만 중복을 제거하거나 정렬은 하지 않는다. SELECT 음식명 FROM 한식 UNION ALL SELECT 음식명 FROM 야식; 테이블 생성 소스 원하시면 댓글달면 드리겠습니다. 3. MINUS 차집합 ( MS-SQ.. 2020. 5. 29. 이전 1 2 3 다음