Data Engineering/MySQL7 [Query] JOIN 쿼리문의 이해 (국제표준 ANSI 조인 기준) 1. 조인(JOIN)의 개념 관계형 DB에서 가장 기본적인 쿼리문이자 중요한 문법이다. 두 개 이상의 테이블을 서로 연결하여 데이터를 추출하기 위한 기법이다. 관계형 DB에서는 조인을 통해 서로 다른 테이블 간의 정보를 원하는 대로 가져올 수 있다. JOIN 개념을 이해하고자 검색하거나 많은 SQL 도서에 시각자료는 동그라미 벤다이어그램을 활용하여 설명한다. 저 같은 경우에는 저거보다 좀 더 직관적으로 이해하기 위해서 직접 표를 그려서 공부했고, 훨씬 이해가 빨랐던 경험이 있다. 2. JOIN 문의 이해 - ANSI 조인 Inner Join 두 테이블을 연결해주는 Key값이 양쪽 모두 존재하여 공유되어야 한다. 즉, 동일한 ID(key)값을 공유하는 레코드끼리 연결한다. Left (Outer) Join .. 2022. 11. 12. [ MySQL 아키텍처 ] 2. InnoDB 스토리지 엔진 아키텍처 (3) InnoDB 스토리지 엔진 아키텍처 (3) 7. 버퍼풀 MySQL 아키텍처를 공부하면서 InnoDB 스토리지 엔진 부분이 가장 방대한 것으로 알려져 있다. 그 InnoDB 스토리지 엔진 중 가장 핵심적인 부분이 바로 '버퍼 풀(Buffer Pool)'으로 불리는 디스크의 데이터 파일이나 인덱스 정보를 메모리에 저장해두는 공간이다. 아마 이번 글이 가장 길지 않을까 싶다. 괜히 처음 접하는 어려운 개념을 내 언어로 바꿔버리면 더욱 혼동이 올 것 같아서 되도록 읽는 책의 본문 내용을 그대로 쓰고자 했다. 반복적으로 읽어가면서 나만의 언어로 풀어가는 것이 맞다고 생각하기 때문이다. InnoDB 엔진 전체 구조 버퍼 풀(Buffer Pool)이란 MySQL InnoDB 스토리지 엔진에서 가장 핵심적인 부분으로서.. 2022. 10. 6. [ MySQL 아키텍처 ] 2. InnoDB 스토리지 엔진 아키텍처 (2) InnoDB 스토리지 엔진 아키텍처 (2) 4. 잠금 없는 일관된 읽기 5. 자동 데드락 감지 6. 자동화된 장애 복구 InnoDB 스토리지 엔진 전체 구조 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 유일하게 레코드 기반의 잠금 기능을 제공하기 때문에 안정적으로 높은 동시성 처리가 가능하며, 성능 또한 우수하다. 4. 잠금 없는 일관된 읽기(Non-Locking Consistent Read) InnoDB 스토리지 엔진은 MVCC 기술을 이용해 잠금을 걸지 않고 읽기 작업을 수행한다. 잠금을 걸지 않기 때문에 InnoDB에서 읽기 작업은 다른 트랜잭션이 갖고 있는 잠금을 기다리지 않고, 읽기 작업이 가능하다. 격리 수준이 SERIALIZABLE이 아닌 READ_UNCOMMITTED나 R.. 2022. 10. 5. [ MySQL 아키텍처 ] 2. InnoDB 스토리지 엔진 아키텍처 (1) InnoDB 스토리지 엔진 아키텍처 (1) 1. 프라이머리 키에 의한 클러스터링 2. 외래 키 지원 3. MVCC InnoDB 스토리지 엔진 전체 구조 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 유일하게 레코드 기반의 잠금 기능을 제공하기 때문에 안정적으로 높은 동시성 처리가 가능하며, 성능 또한 우수하다. 1. 프라이머리 키에 의한 클러스터링 모든 InnoDB 테이블은 기본적으로 프라이머리 키(Primary key)를 기준으로 클러스터링되어 저장된다. 즉, 프라이머리 키 값의 순서대로 디스크에 저장되며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키 값을 논리적 주소로 사용한다. 쿼리 실행계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정된다. .. 2022. 10. 5. [ MySQL 아키텍처 ] 1. MySQL 엔진 아키텍처 (3) MySQL 엔진 아키텍처 (3) 7. 쿼리 캐시 8. 트랜잭션 지원 메타데이터(데이터사전) 7. 쿼리 캐시(Query Cache) MySQL 서버에서 쿼리 캐시는 빠른 응답을 필요로 하는 웹 기반 응용 프로그램에서 매우 중요한 역할을 한다. 쿼리캐시는 SQL 실행결과를 메모리에 캐시하고, 동일 SQL 쿼리가 실행되면 테이블을 읽지 않고 즉시 결과를 반환하기 때문에 빠른 성능을 가졌다. 하지만, 쿼리 캐시는 테이블의 데이터가 변경되면 캐시에 저장된 결과 중에서 변경된 테이블과 관련된 것들은 모두 삭제해야 되기 때문에 심각한 동시 처리 성능 저하를 유발했다. 또한, MySQL 서버가 발전하는 과정에서도 쿼리 캐시는 계속된 동시 처리 성능 저하와 많은 버그의 원인이 되기도 했다. MySQL 8.0에서 쿼리 캐.. 2022. 10. 5. 이전 1 2 다음