요약 B-Tree 인덱스의 가용성과 효율성에 대한 여러 예시와 동작 방식을 이해하게 됨. 비교 조건(”=”, “>”, “”, “ SELECT * FROM dept_emp WHERE dept_no='d002' AND emp_no >= 10114; // CASE A INDEX (dept_no, emp_no) // CASE B INDEX (emp_no, dept_no) 위 그림은 두 인덱스의 칼럼 순서에 따른 인덱스 검색 과정을 보여줌. 이처럼 인덱스를 통해 레코드가 나머지 조건에 맞는지 비교하며 취사선택하는 작업을 “필터링” 이라고도 함. 케이스 A 인덱스는 “dept_no=’d002’ AND emp_no ≥ 10144” 인 레코드를 찾고, 이후 empt_no가 ‘d002’가 아닐 때까지 인덱스를 그냥 쭉 ..
요약 다중 칼럼 인덱스에 대해 이해하게 됨. 각 칼럼의 위치가 중요하다. B-Tree 인덱스의 정렬과 스캔 방향에 따른 동작 원리를 이해하게 됨. 정렬의 경우, 오름차순 내림차순 상관없이, 레코드의 값을 거꾸로 읽으면됨. (옵티마이저의 실행계획에 따름) 인덱스의 스캔방향을 거꾸로 할 수 있음. 정렬 순서가 혼합된 인덱스를 만들 수도 있음. 스캔 방향과 달리, 내림 차순 인덱스로 인덱스 자체를 내림차순으로 만들어낼 수 있음. InnoDB 에서는 역순 스캔의 성능이 느린 이유가 있음. 따라서, 사용하는 쿼리에 예상되는 레코드의 수, 정렬 순서를 고려하여, 내림차순 인덱스를 설정하여 더 적절하게 쿼리를 처리할 수 있음. 메모 다중 칼럼(Multi-column) 인덱스 실제 서비스용 데이터베이스에서는 2개 이상..
요약 인덱스를 통해 테이블의 레코드를 읽는 건수에 따른 비용의 차이를 알게됨. B-Tree 인덱스를 통한 데이터 읽기 방식으로 세가지 방법에 대한 내용을 이해하게 됨. 인덱스 레인지 스캔 인덱스 풀 스캔 루스 인덱스 스캔 인덱스 스킵 스캔을 통해 복합 인덱스에 대한 처리 방식을 이해하게 됨. 메모 읽어야 하는 레코드의 건수 인덱스를 통해 테이블의 레코드를 읽는 것은, 인덱스를 거치지 않고 바로 테이블의 레코드를 읽는 것보다 높은 비용이 드는 작업임. 인덱스를 이용한 읽기의 손익 분기점이 얼마인지 판단이 필요함. 일반적인 DBMS 의 옵티마이저에서는 테이블에서 직접 레코드를 1건 읽는 것보다 인덱스를 통해 레코드 1건을 읽는 것이 4~5배 정도 비용이 더 많이 드는 작업인 것으로 예측함. → RDBMS 서..
요약 랜덤 I/O와 순차 I/O에 대한 차이와 각각의 장단점을 이해하게 됨. 인덱스 테이블 스캔 → 랜덤 I/O, 풀 테이블 스캔 → 순차 I/O 쿼리 튜닝 == 랜덤 I/O 를 줄이는 것 인덱스가 무엇이며, 여러가지 기준으로 종류를 나누는 것을 이해하게 됨. 데이터 저장 성능을 희생하고 데이터 읽기 속도를 높인다. 데이터 저장의 대표 방식은 B-Tree 인덱스 알고리즘에 대해 이해하게 됨. 스토리지 엔진별로 데이터 파일 접근 방식이 다르다. 노드를 기준으로 “트리 탐색” 한다. 인덱스 추가, 변경, 삭제 작업은 추가 비용을 감당해야 함. 인덱스를 이용한 검색 작업은 빠른 속도로 이용할 수 있음. 인덱스의 키 값의 크기가 검색 성능을 높이는 데에 영향을 준다는 사실을 이해하게 됨. B-Tree 깊이가 깊..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 응용 프로그램의 암호화와 테이블 암호와의 차이를 이해하게 됨. 테이블스페이스 이동 방법과, 복제시 암호화된 테이블의 테이블스페이스 이동방법시 주의 사항을 알게 됨. 언두 로그와 리두 로그에 대한 암호화시점을 알게되었고, 테이블스페이스 키로 암호화한다는 사실을 알게 됨. 바이너리 로그 암호화에 대한 내용을 알게 되었고, 해당 키 관리 방법을 알게 됨.(2-Tier) 바이너리 로그 암호화 키의 변경에 대한 프로세스를 이해하게됨. 내부적으로 시퀀스 번호를 이용한다고 하는데 이게 무슨 이점이 있는지는 이해하지 못함.. mysqlbinlog 도구를 활용하여 mysql 서버에게 바이너리 로그파일을 요청할 수 있음을..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 MySQL 데이터 암호화 방식을 이해하게 됨. 암호화 방식을 TDE 로 부르는 이유에 대해 이해하게 됨. 암호화 여부와 성관없이 사용자 쿼리를 동일하게 처리함. MySQL 에서 암호화 키를 2단계 키 관리 방식으로 관리한다는 것을 알게 됨. 마스터키 & 테이블스페이스 키 암호화 했을 때, 고려해야할 성능에 대한 내용을 알게 됨. AES 암호화 알고리즘으로 암호화하는 부분에 대한 내용을 이해하지 못함.. (199p) 테이블 동시 암호 & 압축 시, 압축 후 암호화 해야하는 이유에 대해 이해하게 됨. 암호화했을때 데이터베이스의 복제와 관련한 내용을 이해하게 됨. 마스터 키와, 키링 파일의 백업을 함께 고려해..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 MySQL 의 데이터 압축 방식 및 프로세스를 이해하게됨. 페이지 압축에 대한 이해와 그 방식을 이해하게 됨. 테이블 압축에 대한 이해와 그 방식을 이해하게 됨. 생각보다 생소한 내용이여서 훑어보는 식으로 이해한 것같다.. 다시 읽어보거나 추가 레퍼런스를 읽으며 이해할 필요가 있음. 메모 데이터 압축 MySQL 서버에서 디스크에 저장된 데이터 파일의 크기는 쿼리의 처리 성능과도 직결되지만 백업 & 복구 시간과도 밀접하게 연결됨. 데이터 파일이 크면 클수록 백업 시간이 오래 걸리며, 복구하는 데도 그만큼의 시간이 걸림 또 그만큼 저장 공간이 필요하므로 비용 문제도 발생함. 디스크의 데이터 파일이 크면 클수..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 트랜잭션의 격리 수준 4가지에 대한 특징을 이해하게 됨. 각 격리 수준에 대해, MySQL 에서 어떠한 룰을 가지고 동작하는지 이해하게 됨. REPEATABLE READ 격리 수준에서 SELECT … FOR UPDATE 에 대해 레코드의 쓰기잠금 & 언두 영역 잠금 설정되지 않는 부분을 명확히 이해하지 못함.. 발췌 중요한 것은 사용 중인 트랜잭션의 격리 수준에 의해 실행하는 SQL 문장이 어떤 결과를 가져오게 되는지를 정확히 예측할 수 있어야 한다는 것이다. 그리고 당연히 이를 위해서는 각 트랜잭션의 격리 수준이 어떻게 작동하는지 알아야 한다.(~180p) 메모 MySQL의 격리 수준 트랜잭션의 격리 ..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 인덱스를 이용한 잠금에 대한 이해를 할 수 있었음 InnoDB 에서 인덱스를 통한 잠금 획득하는 방법과 이유를 이해하게 됨. 레코드 수준의 잠금에서 잠금 상태와 대기 상태를 확인할 수 있는 방법을 알게 됨. 메모 인덱스와 잠금 InnoDB 잠금과 인덱스는 중요한 연관관계가 있음. 앞선 InnoDB 스토리지 엔진 잠금 중에 레코드 락은 레코드를 잠그는 것이 아니라 인덱스를 잠그는 방식으로 처리 됨. 즉, 변경해야 할 레코드를 찾기 위해 검색한 인덱스의 레코드를 모두 락을 걸어야 함. 예시를 보자. mysql> SELECT COUNT(*) FROM employees WHERE first_name='Georg..
현재 책너두 1.5기 모집 링크 입니다 : https://breakbook.notion.site 요약 MySQL 엔진에서 제공하는 잠금에 대한 종류와 각 기능을 이해하게 됨. 글로벌 락, 테이블 락, 네임드 락, 메타데이터 락 InnoDB 스토리지 엔진에서 제공하는 잠금에 대한 종류와 각 기능을 이해하게 됨. 레코드 락, 갭 락, 넥스트 키 락, 자동 증가 락 메모 MySQL 엔진의 잠금 MySQL 에서 사용되는 잠금 스토리지 엔진 레벨 MySQL 엔진 레벨 로 나눌 수 있음. MySQL 엔진은 MySQL 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이해하면 됨. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미침. 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간 상호 영향을 미치지 않음...
요약 슬로우 쿼리 로그에 대한 내용과 쿼리 튜닝을 위한 여러 지표에 대한 내용을 알게 됨. 트랜잭션과 잠금에 대한 내용을 이해하게 됨. MySQL 에서 InnoDB 와 MyISAM, MEMORY 스토리지 엔진에 따른 트랜잭션 여부 및 예시를 통해 트랜잭션을 통한 데이터 정합성의 중요성을 이해하게 됨. 트랜잭션의 범위를 최소화 하고, 네트워크 통신이 필요한 지연이 있을 경우, 해당 부분을 트랜잭션에서 반드시 제외하자는 가이드를 알게 됨. 발췌 잠금(Lock) 은 동시성을 제어하기 위한 기능이다. 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 프로그램의 코드에서 라인 수는 한두 줄이라고 하더라도 네트워크 작업이 있는 경우에는 반드시 트랜잭션에서 배제해야 한다. 메모 슬로우 쿼리 로그 MySQL 서버의..
요약 InnoDB, MyISAM, MEMORY 스토리지 엔진과, InnoDB 가 거의 많이 사용된다는 사실을 알게됨. MyISAM 스토리지 엔진의 아키텍쳐와 그 중 키 캐시에 대해 이해하게 됨. 키 캐시를 사용하지 않을 떄 운영체제의 기본 캐시 & 버퍼를 사용한다는 사실을 알게 됨. MyISAM 스토리지 엔진의 데이터 파일과 프라이머리 키(인덱스) 구조에 대해 알게 됨. 가변 길이 ROWID 에서 MyISAM 테이블 최대 크기가 2^(8*(7-1)) 에서 8을 왜 곱하는지 잘 모르겟음.. (해당 테이블의 칼럼에 들어갈 최대 값이 8바이트여서 그런건지.. 모르겟음) → 146page MySQL 트러블 슈팅을 위해 로그 파일을 보는 것을 습관해야 한다. 각 에러로그를 보는 방법에 대해 이해하게 됨. 발췌 M..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.