- 10장 - 인덱스 사용31514RDB에서 사용하는 인덱스는 구조에 따라 다음과 같이 세 가지로 분류할 수 있다.B-tree 인덱스비트맵 인덱스해시 인덱스B-tree 인덱스데이터를 트리 구조로 저장하는 형태의 인덱스이다.균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다. 사실 대부분의 데이터베이스는 트리의 리프 노드에만 키 값을 저장하는 B+tree를 채택한다.B+tree는 B-tree에 비해 검색을 보다 효율적으로 만든 알고리즘이다. 하지만 본질적인 특징은 B-tree와 B+tree가 다르지 않다. 기타 인덱스비트맵 인덱스는 데이터를 비트 플래그로 변환해서 저장하는 형태의 인덱스로, 카디널리티가 낮은 필드에 대해 효과를 발휘한다.하지만 갱신할 때 오버헤드가 너무 크기 때문에 BI/DWH 용도로 사용된다. 해시 인덱스는 키를 해시 ..
- 2024-10-04 13:05:28
- 9장 - 갱신과 데이터 모델31514NULL 값 다루기만약 테이블에 존재하는 NULL 값이 특정 규칙을 갖는다면, 반복계를 사용하여 NULL 값을 채우는 것보다 집합계를 사용하는 것이 더 좋다.다중 필드 사용하기update ScoreCols set score_en = (select score from ScoreRows SR where SR.student_id = ScoreCols.student_id and subject = '영어'), score_nl = (select score from ScoreRows SR where SR.student_id = ScoreCols.stud..
- 2024-09-30 17:24:34
- 8장 - SQL의 순서31514프로그래밍을 할 때, 특정 순서를 가진 데이터를 다루는 일이 자주 있다.그런데 SQL은 전통적으로 순번을 다루기 위한 기능을 가지고 있지 않다.하지만 실제로는 레코드에 적당한 순번을 붙여야 하는 경우가 많은데, 최근 SQL은 순서와 순번을 다루기 위한 기능들을 추가하고 있다.결과적으로 현대의 SQL은 전통적인 집합 지향적 성향에 절차 지향적 생각이 섞인, 하이브리드 언어로 변화하고 있다.레코드에 순번 붙히기레코드에 순번을 붙이는 방법은 크게 두 가지가 있다.윈도우 함수를 사용하는 방법과 상관 서브쿼리를 사용하는 방법인데, 보통 윈도우 함수의 성능이 더 좋고 가독성도 뛰어나기 때문에 여기서는 윈도우 함수 예시만 보여준다.select student_id, row_number() over (orde..
- 2024-09-27 16:18:27
- 7장 - 서브쿼리31514테이블 : 영속적인 데이터를 저장뷰 : 영속적이지만 데이터는 저장하지 않음. 따라서 접근할 때마다 SELECT 구문이 실행됨서브쿼리 : 비영속적인 생존 기간이 SQL 구문 실행 중으로 한정서브쿼리의 문제점서브쿼리의 성능적 문제는 결과적으로 서브쿼리가 실체적인 데이터를 저장하고 있지 않다는 점에서 기인한다.이에 따라 다음과 같이 세 가지 문제가 발생한다. 실체적인 데이터를 저장하고 있지 않은 서브쿼리에 접근할 때마다 SELECT 구문을 실행해서 데이터를 만들어야 한다는 뜻이다.따라서 구문 실행에 발생하는 비용이 추가된다. SELECT 구문의 연산 결과를 사용하기 위해서 메모리에 저장해야 한다.만약 메모리의 공간이 충분하다면 상관 없지만, 아닐 경우 저장소에 저장할 때도 있다.이를 TEMP 탈락 현상의 일종..
- 2024-09-25 11:59:59
- 14장 - 뷰31514데이터베이스를 설계할 때 테이블을 비공개로 유지하고 사용자가 뷰 집합을 통해서만 데이터에 접근할 수 있게 할 수 있다.-- E-mail 정보를 마스킹하는 과정create view customer_vw (customer_id, first_name, last_name, email )asselect customer_id, first_name, last_name, concat(substr(email, 1, 2), '*****', substr(email, -4)) emailfrom customer;뷰는 데이터를 사전 집계하여 데이터베이스에 저장하는 것처럼 보일 수 있는 좋은 방법이다.미리 조인된 결과를 뷰에 저장하는 방식은 적절하게 활용하면 복잡한 쿼리를 단순화하고 성능을 향상시키는 데 도움이 된..
- 2024-09-25 11:11:51
- 6장 - 결합31514결합 알고리즘은 결합의 성능을 결정하고, SQL 전체의 성능을 좌우하는 요인이므로 굉장히 중요하다.결합 VS 상관 서브쿼리상관 서브쿼리: 메인 쿼리의 테이블 값을 참조하여 처리되는 서브쿼리-- 결합을 사용하는 코드select e.emp_id, e.emp_name, e.dept_id, d.dept_namefrom employees einner join department d on e.dept_id = d.dept_id;-- 상관 서브쿼리를 사용하는 코드select e.emp_id, e.emp_name, e.dept_id, (select d.dept_name from departments d where e.dept_id = d.dept_id) dept_namefrom employees e;두 코드는..
- 2024-09-24 13:06:46
- 13장 - 인덱스와 제약조건31514인덱스는 일반적인 데이터 테이블과 달리 특정 순서로 유지되는 특수 테이블이다.다만 인덱스는 모든 데이터를 포함하는 대신, 행이 실제로 존재하는 위치에 대한 정보와 함께 데이터 테이블에서 행을 찾을 때 필요한 열만 포함한다.따라서 인덱스의 역할은 테이블의 모든 행을 확인할 필요 없이 테이블의 행과 열의 서브셋을 쉽게 검색하는 것이다.SHOW 명령어를 사용해서 특정 테이블의 모든 인덱스를 확인할 수 있다.show index from table \G; 테이블을 생성할 때 명시하는 UNIQUE 제약 조건과 테이블을 생성한 후 설정하는 UNIQUE 인덱스는 어떤 차이가 있을까?∴ 고유 인덱스는 더 유연한 옵션을 제공할 수 있고 쿼리 성능 최적화가 목표다.인덱스가 많을수록 서버가 모든 스키마를 최신 상태로 유지하기..
- 2024-09-24 11:43:24
- 5장 - 반복문31514반복문 의존증SQL은 반복문을 만들지 못한 것이 아니라, 필요하지 않아서 만들지 않은 것이다.호스트 언어(Python, JAVA 등)에서 하나의 레코드마다 작은 SQL을 사용해 접근하는 건 반복계 코드라고 한다.반복계 코드의 가장 좋은 점은 SQL을 잘 모르더라도 사용할 수 있다는 것이다.하지만 같은 기능을 구현한다고 가정하면, 반복계로 구현한 코드는 포장계로 구현한 코드에 성능적으로 이길 수 없다.반복계의 공포 3가지SQL을 실행할 때는 다음과 같은 과정을 거친다.SQL 구문을 네트워크로 전송데이터베이스 연결SQL 구문 파스SQL 구문의 실행 계획 생성 또는 평가결과 집합을 네트워크로 전송1번과 5번은 SQL을 실행하는 애플리케이션과 데이터베이스가 물리적으로 같은 위치에 있다면 발생하지 않을 것이다.2..
- 2024-09-23 13:19:37
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)