CS/DB

CS/DB

[DB] MySQL EXPLAIN 쿼리 실행 계획 분석 방법

💡발단 프로젝트의 필수 구현이 마무리되고, 리팩토링을 하면서 쿼리를 최적화할 일이 생겼습니다. 경험적으로, 감으로 하기보다는 체계적으로 최적화할 방법을 고민하던중에 EXPLAIN(쿼리 실행 계획 분석)을 알게 되었습니다. 그 과정에서 EXPLAIN을 공부하게 된 내용을 서술합니다. EXPLAIN 🤔 그게 뭔데? MySQL에서는 최적의 쿼리를 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지를 참조하고, 해당 데이터를 기반으로 최적의 실행 계획을 수립해주는 쿼리 옵티마이저가 내부적으로 동작한다. EXPLAIN이란 여기서 MySQL 옵티마이저가 생성하는 실행 계획을 테이블(엑셀에 가까운) 형태로 볼 수 있게 하는 명령이다. 사용 방법 간단하다. SQL 앞에 EXPLAIN을 명령을 넣고 실행하면..

CS/DB

[DB 기초] 조인(JOIN)

JOIN이란? : 원하는 데이터가 둘 이상의 릴레이션에 흩어져 있는 경우, 관련 튜플들을 조합하여 하나의 릴레이션(테이블)을 구성하도록 하는 검색(SELECT) 방법. 조인은 릴레이션들의 공통 속성을 기준으로 하므로 테이블들간에 최소한 하나의 속성을 공유하고 있어야 한다. 여러가지 조인 조건에 따라 검색 결과를 다르게 할 수 있다. 아래는 뒤에서 예시로 들 과목, 수강 테이블. 과목번호 과목명 강의 교수 001 컴퓨터구조 장성태 002 정보보호개론 양수미 003 디지털논리설계 장성태 004 네트워크보안 양수미 학번 과목번호 학점 180 001 B 181 002 B+ 180 003 A+ 181 004 A 크로스 조인(CROSS JOIN) 테이블 행들 사이의 모든 조합을 행으로 갖는 하나의 통합 테이블을 만..

CS/DB

[DB 기초] 정규화(normalization)

데이터 이상과 정규화를 공부하는 과정을 정리합니다. "누가 DB 설계를 저렇게 해~?" 라고 생각하기도 했지만, 관계형 데이터베이스에서 중복성과 무결성을 강조하는 이유를 이해햐기 좋은 계기가 되었습니다. 💡 데이터 이상(data anomaly) 데이터 이상은 잘못된 DB 설계 과정에서 불필요한 데이터 중복으로 인해 발생하는 부작용을 말한다. 먼저 아무 생각 없이 릴레이션을 짰을 때 무슨 문제가 생기는지 알아보자. 여기 Student 릴레이션이 있다. 학번(PK) 이름 학과 위치 나이 170 원석 컴퓨터 304호 27 180 영두 컴퓨터 304호 24 얼핏 보면 별 문제 없어보이고 검색(SELECT)까지만 해도 전혀 문제가 없다. 그러나 삽입, 갱신, 삭제시에 치명적인 문제가 발생한다. 삽입 이상 : 불필..

CS/DB

[DB 기초] 트랜잭션

트랜잭션(transaction)이란? 한 묶음으로 처리되도록 만든 SQL 명령문들을 묶은 작업 단위 대부분의 의미 있는 서비스 처리를 하려면 SQL 명령문 한번 (SELECT, UPDATE, …)만으로는 어렵다. 계좌이체라는 작업을 예시로 들어보자. 만약 X의 돈을 100 감소시키는 UPDATE 문 직후에 서버가 다운되면 어떻게 될까? 더 이상 서버에선 쿼리문을 날리지 못하니, Y에겐 100만큼의 돈이 가지 않고 회사가 X의 돈을 훔친 꼴이 된다(!). 그리고 갑작스러운 서버 다운, 네트워크 오류, 데이터센터 화재 등 데이터베이스의 일관성을 위협하는 요소들은 생각보다 많다. 이를 해결하기 위해선 계좌이체라는 하나의 처리를 { X 잔고 UPDATE 문, Y 잔고 UPDATE 문 } 한 단위로 묶어서 모두 ..

CS/DB

[DB 기초] DB 인덱스(index)

인덱스란? : 테이블 안의 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터베이스 객체. 책의 목차나 색인을 통해 더 빠르게 내용을 찾는것과 같은 개념이다. 특정 속성에 인덱스를 생성하면, 해당 속성에 대한 데이터들을 정렬해서 별도의 메모리 공간에 데이터의 물리적 주소값(디스크 블록의 주소값)과 함께 저장된다. DB와 디스크DB 데이터가 물리적으로 저장되는 곳은 디스크(보조기억장치)이기 때문에, SQL 실행시 디스크로부터 필요한 데이터를 찾게 된다. DBMS는 필요한 디스크 블럭을 반복해서 주기억장치로 읽어오게 되는데, 문제는 디스크 접근 속도가 주기억장치보다 비교할 수 없을 정도로 너무 느리다는 점이다.DB의 테이블 데이터들은 모두 블록 단위로 관리된다. 만약 쿼리를 통해 1개의 레코드를 읽고 싶더라도..

CS/DB

[DB 기초] 테이블(Table)과 키(Key), 제약조건(Constraint)

관계형 데이터 모델 관계형 데이터 모델은 릴레이션(relation)이라는 수학적 개념에 기초하고 있다. 결국 릴레이션(relation)은 동일한 구조로 이뤄진 튜플(tuple)의 집합이고, 2차원 테이블(table) 형태의 단순한 구조다. (테이블 개념은 내부 저장 구조에 대한 추상적인 표현일 뿐이고, 물리적으로는 복잡한 구조 속에 데이터가 저장된다.) 관계형 데이터베이스는 데이터 묶음을 릴레이션(테이블)의 형태로 저장한다. 주로 테이블이라고 불린다. 💡 릴레이션(테이블) Student라는 릴레이션을 상상해보자. 학번이름학과나이전화번호MBTI 170 원석 컴퓨터SW 27 010123123 INTP 180 영두 컴퓨터SW 24 010456456 ISTP 181 성욱 정보보호 24 010789789 INFP..

CS/DB

[DB 기초] 데이터베이스와 RDBMS, SQL

데이터베이스 시스템(DBMS)을 쓰는 이유 파일 정보 시스템의 문제점: 데이터 중복성, 비일관성 검색의 비효율성 데이터들간에 연결성 부족(여러 파일에 같은 종류의 데이터가 흩어져있을 수 있음) 동시 접근 불가능 및 데이터 무결성 부족(여러 사용자가 접근할 때 데이터에 손상이 생길 수 있다) 복구 어려움 데이터베이스 관리 시스템(DBMS)의 장점: 데이터의 독립성 물리적 독립성 : 데이터베이스 사이즈를 늘리거나 성능 향상을 위해 데이터 파일을 추가하더라도 관련된 응용 프로그램을 수정할 필요가 없다. 논리적 독립성 : 데이터베이스는 논리적인 구조로 다양한 응용 프로그램의 논리적 요구를 만족시켜줄 수 있다. 데이터 종속성 최소화 데이터 저장 방식과 접근 방식에 변화가 생기더라도 관련된 응용 프로그램 수정의 부..

zorbathegeek
'CS/DB' 카테고리의 글 목록