CS/데이터베이스

    mysql Index 종류 및 B-Tree 구조

    인덱스란? 인덱스란 지정한 칼럼들을 기준으로 메모리 영역에 일종의 목차를 생성해 읽기 속도를 높여준다. insert, update, delete의 성능을 희생하고 대신 select의 성능을 향상시키게 된다. 인덱스 종류 책으로 비유하자면 클러스터형 인덱스는 영어사전이며, 보조 인덱스는 맨 뒷장에 찾아보기가 존재하는 책이다. - 클러스터형 인덱스 (clustered index) 테이블당 1개만 존재 테이블은 이 클러스터형 인덱스로 자동정렬이 된다. 즉 특정 컬럼에 pk를 생성하는 순간 해당 칼럼에 클러스터형 인덱스가 자동으로 생성된다. 생성과 동시에 오름차순으로 정렬된다. 리프 페이지가 곧 데이터 페이지 (실제 데이터가 저장된 위치) - 보조 인덱스(secondary index) 한 테이블에 여러개 설정 ..

    mysql 쿼리 최적화

    1. 필요한 데이터만 select 하기 X : SELECT * FROM user O : SELECT id,username,tel FROM user 2. or 이 아닌 UNION ALL 을 사용한다. 먼저 join은 수직결합, union은 수평결합이다. union all과 union distinct의 차이점은 union은 중복 데이터값을 다 삭제하고 연결하며, union all은 중복되는 값을 모두 연결한다. or 조건은 풀스캔으로 인덱스를 타지 않기때문에 unino all 으로 바꿔 인덱스를 타게 해줘야한다. X : SELECT * FROM user WHERE id=1 OR salary=5000 O : SELECT * FROM user WHERE id=1 UNION ALL SELECT * FROM use..

    Mysql JOIN

    Join : 두 개이상의 테이블을 연결해 하나의 테이블처럼 만드는 것을 말한다. 먼저 employee(사람)와 titile (직업) 테이블이 존재할 때 , Left Join (= Left Outer Join) 왼쪽 A 테이블 기준으로 B 테이블을 붙이는 것 select * from employees A left join title B on A.title_id = B.id 왼쪽 테이블의 데이터를 모두 가져오고 , 오른쪽 테이블은 match 됐을때 가져옴 따라서 오른쪽 테이블에서 없는 값들은 Null로 표시된다. 이때 순수 A테이블 데이터만 가져오고 싶다면 select * from employees A left join title B on A.title_id = B.id where B.id is null R..

    데이터베이스 정규화(Normalization)

    1. 정규화란?RDBMS 설계에서 중복을 최소화해 데이터를 구조화하는 과정을 정규화라고 한다.1.1 정규화의 목적중복된 데이터를 허용하지 않음으로 무결성을 유지해 DB의 저장용량을 줄일 수 있다 .무결성이란? 모든 데이터가 완전하고 일관되고 정확한지를 말한다.데이터베이스 구조 확장 시 재디자인을 최소화할 수 있다. 정규화된 DB에서 새로운 데이터 형의 추가로 인한 확장시, 구조변경을 하지 않아도 되거나 일부만 변경해도 된다. 이는 DB와 연결된 응용 프로그램에 최소한의 영향을 준다.insert/update/delete 시 발생할 수 있는 각종 이상 현상(Anomaly)를 방지할 수 있다.이상현상(Anomaly)란?삽입 이상(Insertion anomaly) : 불필요한 정보를 함께 저장하지 않고서는 정보..

    RDBMS vs NOSQL

    RDBMS (= Relational Database Management System) 관계형 데이터 베이스는 엑셀의 형식과 유사하게 행(Row)과 열(Record)을 가지고 있는 2차원 테이블 형식이다. RDBMS는 말 그래도 테이블끼리 관계를 가지고 있는데 일대일관계, 일다대관계, 다대다관계로 나눌 수 있으며 이러한 관계를 나타내기 위해 외래 키(foreign key)를 사용한다. 이 외래 키는 한 테이블의 키 중에서 다른 테이블의 행을 식별할수 있는 키를 의미한다. sql언어를 사용해 저장, 수정, 삭제를 할 수 있으며, 대표적으로 mysql, oracle이 있다. 장점 명확한 구조를 가지고 있기 때문데 정보의 내용을 확인하기 쉽다. 데이터의 분류, 정렬 , 탐색 속도가 빠르다. 오랫동안 사용된 만큼..

    redis의 특징과 자료구조 및 pub/sub

    레디스 특징레디스는 Key-value 형태의 Nosql DB이다.In-Memory DB 이다.관계형 데이터 베이스(mysql)보다 훨씬 빠른데, 그 이유는 메모리 접근이 디스크 접근보다 빠르기 때문이다.인메모리 데이터 베이스 : RAM에 데이터를 저장하기 때문에 빠르지만, 휘발성 메모리이기 때문에 시스템 장애시 데이터가 손실될 수 있다. 따라서 cache로 주로 사용한다.레디스 자료구조 레디스의 장점은 다양한 자료구조를 지원하는 것이다. 레디스는 다양한 자료구조를 key-value 형태로 저장한다. String, BitMap, Hash, List, Set,Sorted Set 등  String : 키와 연결할 수 있는 가장 간단한 유형의 값이다. 레디스의 키가 문자열이므로 문자열을 다른 문자열에 매핑하는 ..