- 10장 - 인덱스 사용31514RDB에서 사용하는 인덱스는 구조에 따라 다음과 같이 세 가지로 분류할 수 있다.B-tree 인덱스비트맵 인덱스해시 인덱스B-tree 인덱스데이터를 트리 구조로 저장하는 형태의 인덱스이다.균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다. 사실 대부분의 데이터베이스는 트리의 리프 노드에만 키 값을 저장하는 B+tree를 채택한다.B+tree는 B-tree에 비해 검색을 보다 효율적으로 만든 알고리즘이다. 하지만 본질적인 특징은 B-tree와 B+tree가 다르지 않다. 기타 인덱스비트맵 인덱스는 데이터를 비트 플래그로 변환해서 저장하는 형태의 인덱스로, 카디널리티가 낮은 필드에 대해 효과를 발휘한다.하지만 갱신할 때 오버헤드가 너무 크기 때문에 BI/DWH 용도로 사용된다. 해시 인덱스는 키를 해시 ..
- 2024-10-04 13:05:28
- 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
- 12장 - 트랜잭션31514잠금은 데이터베이스 서버가 데이터 자원의 동시 사용을 제어하는 데 사용되는 메커니즘이다.대부분의 데이터베이스 서버는 다음 두 가지 방법의 잠금 방식을 사용한다.데이터를 수정할 때 쓰기 잠금을 서버에 요청하고 수신하며, 쓰기 잠금이 해제될 때까지는 읽기 요청이 차단된다.다중 버전 동시성 제어(MVCC) : 스냅샷을 활용하여 어떤 읽기/쓰기 요청을 차단하지 않고 일관된 데이터 버전을 사용한다트랜잭션은 여러 SQL 문을 함께 그룹화해서 모든 구문이 성공하거나 성공하지 않도록 하는 장치다.SET AUTOCOMMIT=0MySQL에서 자동 커밋 모드를 해제할 수 있다.commit 또는 rollback 명령어를 실행했을 때뿐만 아니라 다른 작업으로 인해 트랜잭션이 종료될 수 있다.서버가 종료되고 서버가 재시작되면 자..
- 2024-09-23 12:07:34
- 4장 - 집약과 자르기31514GROUP BY 구를 사용했을 때 SELECT 구에 입력할 수 있는 건 상수, 집약키, 집약 함수 뿐이다.집약을 사용하면 내부적으로 정렬 또는 해시 알고리즘을 사용하는데, 최근에는 대부분 해시를 사용하는 경우가 많다.예를 들어 GROUP BY 구에 지정되어 있는 필드를 해시 함수를 사용해서 해시키로 변환하고, 같은 해시키를 가진 그룹을 모아 집약하는 방식이다.특히 해시의 성질상 GROUP BY의 유일성이 높으면 더 효율적으로 작동한다.GROUP BY 성능정렬과 해시 모두 메모리를 많은 사용하므로, 충분한 워킹 메모리가 확보되지 않으면 스왑이 발생한다.스왑이 발생하면 저장소 위의 파일이 사용되면서 굉장히 느려진다.따라서 연산 대상 레코드 수가 많은 GROUP BY 구를 사용할 때 충분한 성능 검증을 해줘야..
- 2024-09-20 13:37:22
- 3장 - SQL의 조건 분기31514SQL은 조건 분기를 할 때, CASE 식을 사용하지만 UNION을 사용하는 경우도 있다.하지만 UNION을 사용하면 내부적으로 여러 개의 SELECT 구문을 실행하는 실행 계획으로 해석되기 때문에 테이블에 접근하는 횟수가 많아져서 I/O 비용이 증가한다. UNION 조건 분기의 문제점-- UNION을 사용한 조건 분기 쿼리(예시)select item_name, year, price_tax_ex as price from items where year = 2002;좋지 않은 가독성TABLE FULL ACCESS로 2번 접근 -> 성능 감소해결 방법SELECT item_name, year, CASE WHEN year = 2002 THEN price_tax_in END AS price FROM item..
- 2024-09-19 15:08:13
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)