목록DB (5)
CHHB stroy
쿼리 튜닝하다 보면 "인덱스 걸었는데 왜 안 빨라지지?" 하는 순간이 온다. 실행 계획 열어보면 인덱스를 타긴 타는데, 그 뒤에 Key Lookup이라는 놈이 붙어 있다. 이게 뭔가 하고 파봤더니, 인덱스에서 원하는 데이터를 다 못 가져와서 원본 테이블을 다시 뒤지고 있는 거였다. 인덱스를 탔는데 결국 테이블도 읽는, 이 모순적인 상황.INCLUDE를 알기 전과 후로 내 인덱스 설계가 완전히 달라졌다. 과장 좀 보태면 MSSQL 인덱스에서 제일 중요한 기능이 INCLUDE라고 생각한다.먼저 인덱스 구조를 알아야 한다INCLUDE가 왜 필요한지 이해하려면, MSSQL 인덱스가 내부적으로 어떻게 생겼는지를 알아야 한다.MSSQL의 Non-Clustered Index는 B-Tree 구조다. 크게 두 부분으로 ..
MySQL만 쓰다가 PostgreSQL로 넘어온 지 꽤 됐다. 처음에는 "뭐가 다르다고 이걸 굳이?" 싶었는데, 쓰면 쓸수록 돌아갈 수가 없다. 오늘은 내가 PostgreSQL 쓰면서 느낀 점들이랑, 입문할 때 알았으면 좋았을 내용들을 한번 정리해보려고 한다.PostgreSQL이 뭔가요?한 줄로 말하면 오픈소스 관계형 데이터베이스다. MySQL이랑 같은 카테고리인데, 좀 더 기능이 많고 표준 SQL을 충실하게 따른다. 흔히 줄여서 Postgres(포스트그레스)라고 부른다. "포스트그레스큐엘"이라고 매번 말하기 귀찮으니까.원래 UC 버클리에서 1986년에 시작된 프로젝트인데, 거기서부터 지금까지 꾸준히 개발되고 있다. 오픈소스 DB 중에서 역사가 가장 길고 커뮤니티도 탄탄하다.MySQL에서 넘어온 사람이 ..
한 줄 요약PIVOT: 행(Row)을 열(Column)로 변환UNPIVOT: 열(Column)을 행(Row)으로 변환서로 정반대 방향의 변환이다.PIVOT — 행을 열로 회전언제 쓰는가?월별 매출 데이터가 행으로 12줄 쌓여 있는데, 한 줄에 1월~12월 컬럼으로 보고 싶을 때 사용한다.변환 전 (행 기반)TEAMMONTHAMOUNT영업1팀11000영업1팀22000영업1팀31500변환 후 (열 기반)TEAM1월2월3월영업1팀100020001500문법SELECT *FROM 원본테이블PIVOT ( 집계함수(값컬럼) FOR 회전할컬럼 IN ([값1], [값2], [값3], ...)) AS P실전 예제-- 팀별 월매출이 행으로 저장된 테이블SELECT TEAM, [1] AS M01, [2] AS M0..
1. 트랜잭션(Transaction)이란?트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위로, 여러 개의 데이터베이스 연산들을 묶어서 모두 성공하거나 모두 실패하도록 하는 메커니즘입니다.핵심 개념All or Nothing: 전부 성공하거나 전부 실패논리적 작업 단위: 업무상 나누어질 수 없는 최소 단위데이터 일관성 보장: 데이터베이스의 무결성 유지2. 트랜잭션의 ACID 속성 ⭐⭐⭐ADsP 시험에서 가장 중요한 개념입니다!2.1 원자성(Atomicity)정의: 트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 함특징:All or Nothing 원칙중간 상태는 존재하지 않음실패 시 모든 변경사항 취소(Rollback)예시:-- 계좌 이체 트랜잭션BEGIN TRANSACTION; UPDA..
1. KEY(키)란 무엇인가?KEY는 데이터베이스 테이블에서 레코드(행)를 유일하게 식별하거나 구분하는 데 사용되는 속성(컬럼) 또는 속성들의 집합입니다.KEY의 기본 목적데이터의 유일성(Uniqueness) 보장레코드 간의 관계(Relationship) 설정데이터 무결성(Integrity) 유지효율적인 검색과 정렬 수행2. KEY의 종류별 상세 설명2.1 Super Key (슈퍼키)정의: 테이블에서 각 레코드를 유일하게 식별할 수 있는 속성들의 집합특징:레코드를 구분할 수 있는 모든 가능한 속성 조합최소성을 고려하지 않음 (불필요한 속성이 포함되어도 됨)모든 다른 키들의 상위 개념예시:학생 테이블: [학번, 이름, 주민번호, 전화번호, 학과]슈퍼키 예시:- {학번}- {주민번호}- {학번, 이름}- {..