개요 그동안 데이터베이스 조회 성능 향상을 위해서 인덱스를 종종 사용했었는데, 따로 포스팅으로 정리한 적은 없어서 정리해보고자 한다.인덱스를 한 마디로 표현하면 "별도의 메모리를 추가로 할당하여 데이터베이스 조회 성능을 향상시킬 수 있는 방법"이라고 할 수 있다. 인덱스인덱스에 대해서 이야기하기 전에, 데이터베이스에서 어떻게 데이터를 조회하는지 서술하도록 하겠다. 우리가 흔히 말하는 Oracle이나 Mysql을 '데이터베이스 시스템' 이라고 부르는데, 데이터베이스 시스템은 데이터가 저장되는 '데이터베이스'와 데이터베이스를 관리하는 소프트웨어인 'DBMS(DataBase Management System)'으로 구성된다. DBMS에서 데이터베이스에 있는 데이터를 조회하기 위해서는 DBMS 내의 '질의 처리..
mysql에 이어 두 번째 데이터베이스 익히기 https://redis.io/ Redis Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker redis.io NoSQL '데이터베이스에는 관계형 데이터베이스(RDBMS) 이외에도 여러가지 형태의 데이터베이스가 존재한다' 라고 데이터베이스 전공수업때 배운 적이 있다. 지금까지 내가 써온 Mysql은 관계형 데이터베이스(RDBMS)의 대표적인 예시로, SQL이라고 불리는 쿼리에 의해 저장되며, 모든 데이터는 정해진(정적) 스키마에 맞추어 테이블 형태로 저장되며, 테이블은 열과 행으로 구성되어 관계를 표현..
SQL 데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 언어. 목적에 따라서 DDL(데이터 정의어 - 테이블이나 관계 생성), DML(데이터 조작어 - 테이블의 데이터 CRUD), DCL(데이터 제어어 - 데이터의 사용 권한 관리)로 구분된다. DDL (데이터 정의어) 테이블을 구성하거나, 속성과 기본키(pk)/외래키(fk)를 정의하는 쿼리문을 말한다. 테이블을 생성하는 create문, 테이블 구조를 수정하는 alter문, 그리고 테이블을 삭제하는 drop문이 있다. CREATE : 테이블을 생성하기 위한 쿼리문. 속성명과 데이터타입을 명시해주고 뒤에 속성의 제약을 정의해줄 수 있다. 속성을 모두 정의하고 나서 pk와 fk를 정의해줄 수도 있고, 제약을 정의할 때 같이 정의해줄 수도 있다. ALT..
개요 잘못 설계된 데이터베이스는 삭제이상, 삽입이상, 수정이상 등의 문제를 일으킬 수 있다.삭제이상: 튜플을 삭제했는데 유지되어야 하는 정보도 연쇄삭제되는 현상삽입이상: NULL입력시 튜플 삽입이 거부되는 이상현상수정이상: 튜플 수정시 데이터의 일부만 수정되어 데이터의 불일치현상이 나타나는 현상 - 삭제이상: 5번 튜플(안중근)의 정보 삭제시 AI융합학부의 정보가 같이 삭제된다.- 삽입이상: 글로벌미디어 학과에 대한 정보를 삽입하고 싶지만 학생명, 학번이 NULL값이라 삽입되지 않는다.- 수정이상: 소프트웨어학부의 과사무실 정보를 수정하기 위해 3번튜플의 과사무실 정보를 변경하면 3,4번튜플에 불일치가 발생한다. 이러한 이상현상은 테이블의 잘못된 설계로 인해 발생한다. 따라서 테이블의 구조를 수정하여 ..
트랜잭션 트랜잭션이란 데이터베이스에서 하나의 공통된 목적을 위한 작업을 의미한다. 예를 들면, A에서 B로의 '송금'이라는 거래를 위해서는 A의 잔고에서 임의의 금액을 빼고, B의 잔고에 임의의 금액만큼을 더해주는 2가지 일이 한 가지 일처럼 실행되어야 한다. 두가지 일 중에서 하나의 작업이라도 누락된다면 문제가 발생할 수 있는데, 트랜잭션은 모든 하위 작업을 묶어서 모두 실행되거나, 모두 실행되지 않도록 만든다. 만약에 모든 작업이 성공하여 DB에 변화가 반영되었다면 해당 작업이 커밋(commit)되었다고 하고, 하나라도 실패해서 작업 이전으로 되돌아가는 것을 롤백(rollback)이라고 한다. 트랜잭션의 성질 트랜잭션은 ACID로 불리는 4가지 대표적인 성질을 갖는데, 각각 원자성, 일관성, 고립..
SQL 데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 언어. 목적에 따라서 DDL(데이터 정의어 - 테이블이나 관계 생성), DML(데이터 조작어 - 테이블의 데이터 CRUD), DCL(데이터 제어어 - 데이터의 사용 권한 관리)로 구분된다. DML (데이터 조작어) 테이블에 데이터를 검색/삽입/수정/삭제하는데 사용되며, select, insert, delete, update문 등이 있다. - SELECT : 테이블에 데이터를 검색하여 출력하는 목적으로 사용되는 쿼리문. 1. ALL | DISTINCT : ALL은 중복허용을 의미하고 (default값), DISTINCT는 중복을 제거하고 집계하는 것을 의미한다. ex) select distinct * from Book; 2. WHERE 절에는 ..
키 키: 특정 튜플을 식별할 때 사용하는 속성(의 집합) 슈퍼키: 유일성을 가진 속성(의 집합) 후보키: 유일성&최소성을 가진 속성(의 집합) 기본키(pk): 후보키 중 대표로 삼는 하나의 키 대리키(pk): DBMS가 임의로 생성하여 사용하는 기본키 외래키(fk): 다른 릴레이션의 기본키를 참조하는 속성 관계대수 1. 셀렉션: 릴레이션에서 조건에 맞는 튜플을 추출하는 연산 2. 프로젝션: 릴레이션의 속성을 추출하기 위한 연산 3. 합집합: 속성이 동일한 두 릴레이션을 합침. 동일튜플 존재시 하나만 표시한다. 4. 교집합: 합병가능한 두 릴레이션이 공통으로 가지고 있는 튜플을 반환 5. 차집합: 첫번째 릴레이션에는 속하고 두번째 릴레이션에는 속하지 않는 튜플을 반환 6. 카티전 프로덕트: 두 릴레이션의 ..
실제 데이터가 하드디스크에 저장되는 데이터베이스부터, 데이터 모델과 DBMS까지를 데이터베이스 시스템이라고 부른다. 이러한 데이터베이스 시스템 조작을 위해서 SQL문이 사용된다. 데이터베이스: 데이터가 구조적으로 통합되어 하드디스크에 저장된 형태 데이터베이스 관리 시스템(DBMS): 데이터를 관리하는 소프트웨어 프로그램. 사용자와 db 사이에서 둘을 연결한다. 데이터 모델: 데이터를 저장하는 이론적 방법. 데이터, 연산자, 무결성 제약조건을 요소로 갖는다. 데이터베이스 시스템: DB, DBMS, 데이터 모델로 구성된 시스템 - SQL의 종류 데이터 정의어(테이블 구조 정의): create, alter, ... 데이터 조작어(데이터 조작): select, insert, delete, update, ... ..
트랜잭션 격리 수준이란 트랜잭션끼리 얼마나 고립되었는지를 나타내는 것이다. 트랜잭션 격리 수준이 높아질수록(트랜잭션 레벨이 높아질수록) 트랜잭션간의 고립도가 높아지는 대신 성능이 떨어지게 된다. 트랜잭션 레벨 0: READ UNCOMMITED 트랜잭션 레벨 1: READ COMMITED 트랜잭션 레벨 2: REPEATABLE READ 트랜잭션 레벨 3: SERIALIZABLE 이러한 트랜잭션 격리의 이유는 동시성 제어(Concurrency Control)때문이다. 동시성 제어란 DB 시스템에서 실행되고 있는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하도록 하는 것. 이를 위해서 일부 트랜잭션에 변경이 생기더라도 하나의 트랜잭션이 시작되고 종료되기까지 데이터를 중도..
JOIN JOIN은 두개 이상의 테이블에 대해서 결합하여 나타낼때 사용한다. 결합을 위해서 조건을 지정해줄 수도 있는데, 이 조건은 각 테이블의 열이 일치하는지 여부를 기준으로 한다. 내부 조인은 두 테이블 모두에서 일치하는 값을 가진 행만 골라서 테이블을 만들어서 반환한다. A와 B라는 두 개의 테이블이 있다고 하자. 위 사진에서 볼 수 있듯이 JOIN은 SELECT FROM TABLE A JOIN TABLE B ON 라고 하면 A의 col_a와 B의 col_b가 같은 열들의 경우 A와 B의 선택한 columns 정보를 합쳐서 새로운 테이블을 생성해준다. 위와 같은 두 개의 테이블이 있다고 할 때, SELECT A.ID, A.NAME, B.KNAME FROM A INNER JOIN B ON A.ID=B..