DB
DB 쿼리 성능을 개선해보자
우리는 프로젝트를 하면서 수많은 쿼리를 작성하게 됩니다. 하지만 동일한 결과를 가져오더라도, 수행하는 시간은 다를 수 있습니다. 쿼리문을 효율적으로 짜기 위해 피해야할 것들은 무엇이 있을까요? 1. Select 문에 * 쓰지 않기 SELECT * FROM member SELECT id, age, name FROM member 불러오는 필드값이 많을 수록 DB는 더 많은 부담을 지게 됩니다. 칼럼 중에 꼭 필요한 필드만 가져올 수 있도록 SELECT 문에 * 사용을 지양해야 합니다. 2.Like 검색어에 변수 앞 %를 피하기 보통 조건문을 많이 쓰는 칼럼의 경우 최대한 결과를 빨리 찾기 위해 인덱스를 걸어두는데, 변수 앞에 다음과 같이 %를 두게 되면 인덱스를 사용하지 않고 테이블 Full Scan을 하게..
식별관계와 비식별관계
외래키를 사용하여 테이블 간 관계를 정립해줄 때 사용하는 전략은 크게 식별 및 비식별 관계가 있습니다. 현재 진행하고 있는 프로젝트와 관련된 내용이라, 이번 기회에 각각에 대해 자세하게 살펴보도록 하겠습니다. 식별관계 식별 관계는 부모 테이블의 기본키가 자식 테이블의 기본키이면서 동시에 외래키가 되는 관계를 뜻합니다. 즉 자식 테이블의 존재 유무는 부모 테이블에 의존적이라 할 수 있습니다. 비식별관계 비식별 관계는 부모 테이블의 기본키가 자식 테이블의 외래키로만 이용되는 관계를 뜻합니다. 또한 외래 키에 NULL의 허용 여부에 따라 필수적 비식별 관계와 선택적 비식별 관계로 나뉩니다 필수적 비식별 관계는 외래키에 NULL을 허용하지 않으며, 연관관계를 필수적으로 맺어야합니다. 선택적 비식별 관계는 외래키..
DB Index에 대하여
인덱스란? 인덱스는 추가적인 쓰기 작업과 저장 공간을 활용하여 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 예시를 들면 다음과 같은 멤버 테이블이 있다고 가정해보겠습니다. a라는 칼럼이 '13' 이라는 값을 지니는 멤버를 찾으려면 모든 테이블을 다 뒤져야 찾을 수 있게 됩니다. 이것은 풀 테이블 스캔, 혹은 풀 스캔이라고 부릅니다. 만약 이를 인덱스를 사용하게 된다면, a 칼럼의 모든 데이터들이 정렬된 상태로 새로운 저장소를 만들어 저장되게 됩니다. 물론 해당 값이 기존의 테이블에 어디에 위치해있는지 가리키는 포인터 또한 저장됩니다. 인덱스 테이블을 활용하여 a=13을 찾는다면 b-tree의 root부터 시작하여 13이 위치한 노드까지 binary search 방식을 활용하여 빠르게 찾아낼 수 ..
Transaction(트랜잭션)이란
DB 활용에 있어서 빠져서는 안될 주제가 트랜젹선이 아닐까 생각이 듭니다. 그만큼 DB를 활용하는데 있어서 꼭 알고 있어야 하는 필수 개념이 아닐까 합니다. 트랜잭션에 대해 알아보기 이전에 DB를 쓰는 이유는 뭘까요? 사실 데이터를 저장한다면 단순히 파일에 저장해도 되는데, 왜 굳이 데이터베이스에 저장하는 걸까요? 가장 대표적인 이유는 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문입니다! Transaction 트랜잭션의 사전적 정의는 다음과 같습니다. 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적인 단위로, 사용자가 시스템에 대한 요구 시 시스템이 응답하기 위한 상태변환 과정의 작업 단위이다. 트랜잭션은 커밋되거나 롤백된다. 간단하게 말해서 하나의 작업단위라고 생각하시면 ..