DB & SQL
-
10장 인덱스 사용DB & SQL/SQL 레벨업 2023. 8. 9. 12:13
34. 인덱스와 B-tree - RDB에서 사용하는 인덱스는 구조에 따라 다음 세 가지로 분류할 수 있다. ㆍB-tree 인덱스 ㆍ비트맵 인덱스 ㆍ해시 인덱스 1. 만능형 : B-tree - B-tree 인덱스는 이름 그대로 데이터를 트리 구조로 저장하는 형태의 인덱스이다. - 균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다. - 데이터베이스에서 '인덱스'라고 말하면 대부분 B-tree 인덱스를 지칭하는 것이다. - 실제로 특별한 수식을 붙이지 않은 채 CREATE INDEX 구문을 실행하면, 모든 DBMS에서 암묵적으로 B-tree 인덱스가 만들어진다. - B-tree가 검색 알고리즘으로서는 뛰어나게 성능이 좋은 편은 아니다. - B+tree의 검색 성능이 뛰어난 이유 ㆍB+tree는 루트와 리프..
-
9장 갱신과 데이터 모델DB & SQL/SQL 레벨업 2023. 8. 9. 11:59
26. 갱신은 효율적으로 1. NULL 채우기 2. 반대로 NULL을 작성 27. 레코드에서 필드로의 갱신 1. 필드를 하나씩 갱신 2. 다중 필드 할당 - 여러 개의 필드를 리스트화하고 한 번에 갱신하는 방법 - 이렇게 하면 서브쿼리를 한꺼번에 처리할 수 있어 성능도 향상되고 코드도 간단해진다. 3. NOT NULL 제약이 걸려있는 경우 MERGE 구문 사용 - NOT NULL의 경우에 대응하는 한가지 방법이 MERGE 구문을 사용하는 것이다 - 본래 MERGE 구문은 UPDATE와 INSERT를 한번에 시행하려고 고안된 기술이다. ㆍ하지만 UPDATE 또는 INSERT만 수행해도 구문 상에는 문제가 없다. 28. 필드에서 레코드로 변경 29. 같은 테이블의 다른 레코드로 갱신 1. 상관 서브쿼리 사용..
-
8장 SQL의 순서DB & SQL/SQL 레벨업 2023. 8. 8. 11:16
23. 레코드에 순번 붙이기 - 최근 SQL은 순서와 순번을 다루기 위한 기능들을 추가하고 있다. ㆍ예를 들어 시퀀스 객체 또는 ID 필드와 같은 순번을 붙일 수 있는 기능을 비롯해, 지금까지 사용해왔던 윈도우 함수 역시 이러한 요구에 대응한 기능이다. 1. 기본 키가 한 개의 필드일 경우 윈도우 함수 사용 # 기본 키가 한 개의 필드일 경우(ROW_NUMBER) SELECT student_id, ROW_NUMBER() OVER (ORDER BY student_id) AS seq FROM Weights; 상관 서브쿼리를 사용 - MySQL처럼 ROW_NUMBER 함수를 사용할 수 없는 환경에서는 상관 서브쿼리를 사용해야 한다 # 기본 키가 한 개의 필드일 경우(상관 서브쿼리) SELECT student_..
-
7장 서브쿼리DB & SQL/SQL 레벨업 2023. 8. 8. 11:10
21. 서브쿼리가 일으키는 폐해 - 서브쿼리란 SQL 내부에서 작성되는 일시적인 테이블이다 - SQL은 테이블과 서브쿼리를 같은 것 취급한다. ( 기능적인 관점에서 ) - 테이블, 뷰, 서브쿼리의 차이점 ㆍ테이블 : 영속적인 데이터를 저장 ㆍ뷰 : 영속적이지만 데이터는 저장하지 않음, 따라서 접근할 때마다 SELECT 구문이 실행됨 ㆍ서브쿼리 : 비영속적인 생존 기간(스코프)이 SQL 구문 실행 중으로 한정 1. 서브쿼리의 문제점 - 서브쿼리의 성능적 문제는 결과적으로 서브쿼리가 실체적인 데이터를 저장하고 있지 않다는 점에서 기인한다. 연산 비용 추가 - 실체적인 데이터를 저장하고 있지 않다는 것은 서브쿼리에 접근할 때마다 SELECT 구문을 실행해서 데이터를 만들어야 한다는 뜻이다 - 따라서 SELEC..
-
6장 결합DB & SQL/SQL 레벨업 2023. 8. 8. 11:07
18. 기능적 관점으로 구분하는 결합의 종류 - SQL에는 '결합'이라는 이름이 붙은 연산이 굉장히 많다. ㆍ크로스 결합 ㆍ내부 결합 ㆍ외부 결합 ㆍ자기 결합 ㆍ등가 결합/비등가 결합 ㆍ자연 결합 - 기능적인 관점으로 분류한 것이 크로스 결합, 내부 결합, 외부 결합이다. - 등가 결합/비등가 결합은 결합 조건으로 등호(=)를 사용하는지, 이 이외의 부등호를 사용하는지의 차이를 의미한다. - 자연결합은 가장 자주 사용하는 '내부 결합이면서 등가 결합'이라는 조합을 간단하게 작성하는 것이다. SELECT * FROM Employees NATURAL JOIN Departments; SELECT * FROM Employees E INNER JOIN DEpartments D ON E.dept_id = D.dep..
-
5장 반복문DB & SQL/SQL 레벨업 2023. 8. 7. 10:18
14. 반복문 의존중 - 관계 조작(SQL)은 관계 전체를 모두 조작의 대상으로 삼는다. ㆍ이러한 것의 목적은 반복을 제외하는 것이다. ㆍ최종 사용자의 생산성을 생각하면 이러한 조건을 만족해야 한다. ㆍ그래야만 응용 프로그래머의 생산성에도 기여할 수 있을 것이다. 1. 내부적으로는 반복문 사용 15. 반복계의 공포 - 여러 행을 한꺼번에 처리하는 SQL을 포장계라고 부른다. 1. 반복계의 단점 - 한 다미로 설명한다면 '성능'이다. ㆍ같은 기능을 구현한다고 가정하면, 반복계로 구현한 코드는 포장계로 구현한 코드에 성능적으로 이길 수가 없다. - 처리하는 레코드 수가 적을 때는 반복계와 포장계에 큰 차이가 없다. SQL 실행의 오버 헤드 - SQL을 실행할 때는 데이터를 검색하거나 연산하는 실제의 SQL ..
-
4장 집약과 자르기DB & SQL/SQL 레벨업 2023. 8. 7. 10:13
12. 집약 - SQL의 특징적인 사고방식 중에, 레코드 단위가 아닌 레코드의 '집합' 단위로 처리를 기술하는 것이다. ㆍ이런 사용 방식을 집합 지향(set-oriented)라고 불린다. - 이러한 특징이 가장 잘 드러나는 때가 GROUP BY 구, HAVING 구와, 그것과 함께 사용하는 SUM 또는 COUNT 등의 집약 함수를 사용하는 때이다. - SQL은 이러한 집합 조작이 굉장히 잘 구현되어 있어서, 절차 지향 언어에서 반복문 또는 분기를 여러 번 사용해야 하는 복잡한 처리를 굉장히 간단한 코드로 작성할 수 있다. - SQL에는 집합 함수(aggregate function)가 있다. ㆍCOUNT ㆍSUM ㆍAVG ㆍMAX ㆍMIN - 함수들의 이름 앞에 '집약'이라는 접두사가 붙은 이유는 문자 그..
-
3장 SQL의 조건 분기DB & SQL/SQL 레벨업 2023. 8. 7. 10:09
8. UNION을 사용한 쓸데없이 긴 표현 - SQL 에서 조건 분기를 할 때 UNION을 사용해도 좋을지 여부는 신중히 검토해야 한다. 1. UNION을 사용한 조건 분기와 관련된 간단한 예제 SELECT item_name, year, price_tax_ex AS price FROM Items WHERE year = 2002; - 문제점 ㆍ1. 쓸데없이 길다. ㆍ2. 성능이 좋지 않다. - UNION 쿼리는 Items 테이블에 2회 접근하고 있다. ㆍ이 두번도 TABLE ACCESS FULL 이 발생하므로, 읽어들이는 비용도 테이블에 크기에 따라 선형으로 증가 - 정확한 판단 없이 SELECT 구문 전체를 여러 번 사용해서 코드를 길게 만드는 것은 쓸데없이 테이블 접근을 발생시키며 SQL의 성능을 나쁘..