본문 바로가기

DataBase

(7)
DB - INSERT INTO VS REPLACE INTO REPLACE INTO란? MySQL과 MariaDB에서는 REPLACE INTO를 사용할 수 있다. (Oracle에서는 MERGE INTO) REPLACE INTO는 기본적으로 INSERT INTO와 마찬가지로 데이터를 테이블에 넣는점에서 동일하다. 차이점은 INSERT INTO는 신규로 데이터를 입력하는데, REPLACE INTO는 PK를 기준으로 데이터가 존재한다면, 기존 데이터를 지우고 기준키로 데이터를 다시 쓰는 것이다. REPLACE INTO 예제코드 -- 테이블 생성 CREATE TABLE test ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'PK', name VARCHAR(50) NULL COMMENT '이름', age TINYINT(3) DEFAULT ..
DB - 복합키 순서 데이터베이스에서 키를 생성할 때 기본키를 구성하는 컬럼을 복수로 지정하거나, 여러 필드를 조합하여 기본키 역할을 할 수 있게하는등의 개념을 복합키라고한다. 그리고, 여러 개의 컬럼으로 구성할 때는 당연히 컬럼 순서가 자연스럽게 정의가 될 것인데, 이 순서를 설계 시점부터 고민해야할 것이다. 복합키를 어떤 기준으로 정하면 좋을까? 일반적으로는 카디널리티가 큰(중복도가 낮은) 순서대로 구성하되, 조회/입력 방법에 따라서 적절히 순서를 바꿔서 구성하거나 새로운 인덱스를 추가하는 방향으로 기준을 잡아보면 좋다. CREATE TABLE `ys-lab`.`student` ( `school_code` INT(11) NOT NULL COMMENT '학교코드', `student_grade` SMALLINT(3) NOT..
DB - Replication DataBase에서의 Replication이란? 복제를 의미하며, 2대 이상의 DBMS를 나누어서 데이터를 저장하는 방식이다. master - slave 방식을 주로 사용하며 master - master, 다중 slave 방식으로도 사용한다. 어플리케이션 서버와 데이터베이스간에 기본적으로 아래와같이 심플하게 구성을 한다고 해보자. 보통 개발환경에서는 단순한 모델을 가지고 구축을 진행한다. 하지만 실제 운영환경에서 트래픽이 증가하여 데이터베이스가 많은 Query를 처리를 하게되면, 부하가 걸릴 것이다. 이 때 Repliaction을 진행하여 분리한다면 데이터베이스의 부하분산 처리 효과를 가져갈 수 있다. Master와 Slave 위의 그림처럼 Master DB와 Slave DB를 나누어서 분산처리 하는 모..
DB - 정규화(Normalization) 정규화(Normalization)란? 관계형 데이터베이스에서 데이터의 중복을 최소화하기 위한 목표를 가지고 컬럼의 관계를 고려하여 테이블을 설계를 재구성하는 프로세스이다. 일반적으로 테이블을 여러개로 분해하게되면 속도는 상대적으로 느려질 수 있지만, 아래와 같은 문제들이 발생하게 된다. - 데이터를 저장할 때 원하지 않는 정보가 함께 추가 - 삽입 이상 - 레코드(=튜플)을 삭제함으로써 유지되어야 하는 정보까지도 연쇄적으로 삭제될 수 있음 - 삭제 이상 - 중복된 레코드들 중 일부의 속성만 갱신 시킴으로써 정보의 모순성이 발생 - 갱신 이상 정규화는 테이블을 분해하는 단계가 정의되어 있는데, 어떻게 분해하는지에 따라 그 단계가 달라진다. 제1 정규화 (1NF(=First Normal Form)) "관계형..
DB - 실행계획(explain) 보는방법 DataBase 질의(SQL) 실행계획(explain)을 확인하는 방법을 정리하였다. -- 실행계획 explain [select ... from ... where ...]; -- 실행계획 + mysql의 최종 형태 확인 explain extended [select ... from ... where ...]; show warnings; 구분 = id: select 아이디로 select를 구분하는 번호 = select_type: select에 대한 타입 구분 설명 SIMPLE UNION이거나 서브쿼리가 없는 단순 SELECT를 의미 PRIMARY 서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT ex) SELECT * FROM ( SELECT * FROM tab01 ) sub DERIVED FROM절 안의..
DB - Bulk Insert 실무를 진행하면서 데이터베이스에 대량으로 데이터를 입력이 필요한 상황이 올 수 있다. 이러한 상황에서 사용할 수 있는 방법은 어떤게 있을까? 가장먼저 생각이 나는 방법은, 반복문(for)을 통해서 넣어주는 방법이다. INSERT INTO users(user_id, user_name, user_age) VALUES (1, '가나다', 30); INSERT INTO users(user_id, user_name, user_age) VALUES (2, '라마바', 29); INSERT INTO users(user_id, user_name, user_age) VALUES (3, '사아자', 25); INSERT INTO users(user_id, user_name, user_age) VALUES (4, '차카타'..
DB - 인덱스(Index) (B+Tree Index) 인덱스(index)란 무엇인가? DataBase에서는 인덱스(index)를 굉장히 많이 사용한다. 인덱스(index)란 무엇인가? 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시켜주는 자료구조이다. 우리가 수천페이지가 넘는 책에서 필요한 내용을 찾는다고 했을때, 페이지를 차례대로 넘기면서 찾는다면, 처음부터 찾아봐야할 것이고 시간이 많이 소비되어 비효율적으로 내용을 찾을 것이다. 이때, 책에 필요한 내용이 인덱스(차례)에 명시되어있다면, 우리는 그 차례를 보고 해당위치의 페이지로 가서 빠르게 찾을 수 있을 것이다. 데이터베이스의 인덱스는 이러한 원리와 동일하다. 인덱스의 장점과 단점 - 장점 1] 테이블의 데이터를 조회하는 속도가 빨라져서 성능이 향상된다. 2] 전반적..