- 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
- 쿼리가 무한 루프에 빠지는 문제31514상황 및 문제나는 다음과 같은 파이썬 코드로 MySQL 테이블을 생성했다.import mysql.connector# MySQL 연결 설정mydb = mysql.connector.connect( host=*****, user=*****, password=*****, database=*****)# 커서 생성mycursor = mydb.cursor()# 테이블 생성mycursor.execute("""CREATE TABLE IF NOT EXISTS table ( ...)""") 하지만 특정 필드의 이름에 오타가 있다는 사실을 알게 되어 MySQL 서버에 접속하여 DROP TABLE 쿼리문을 실행했지만 무한 루프에 빠지게 되었다. 원인MySQL 커넥터는 트랜잭션 기반으로 동작한다. 만약..
- 2024-09-19 14:10:32
- 6장 - 집합 연산자31514집합 연산자 UNION, INTERSECT, EXCEPT를 사용하려면 두 테이블은 다음과 같은 조건을 가져야 한다.두 테이블은 같은 수의 열을 가져야 한다.각 열의 자료형은 서로 동일하거나, 서버가 서로 변환할 수 있어야 한다.UNION 연산자의 경우 중복을 포함하기 위해서는 UNION ALL을 사용한다.MySQL 버전 8.0은 INTERSECT와 EXCEPT 연산자를 지원하지 않는다.집합 연산자 사용 후에 ORDER BY를 통해 데이터를 정렬할 수 있다.
- 2024-09-12 17:45:27
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)