책/Real MySQL 8.0 1권 3

[MySQL] B-Tree 인덱스

인덱스를 생성하는 도중 의문에 생겼다.다중컬럼 인덱스를 생성하면 단일컬럼인덱스를 왜 또 생성해주어야할까?다중컬럼 인덱스를 걸어두면 단일컬럼 조회 시에도 인덱스 스캔을 타야 하는 것이 아닐까?B-Tree 인덱스 구조를 파헤쳐보면  이 문제에 대한 해답을 얻을 수 있었다. 인덱스란?테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan) 과 달리 인덱스를 검색하여 해당 자료의 테이블에 접근하는 방법입니다.인덱스를 책에 마지막에 있는 인덱스 목록(찾아보기) 에 비유하자면 책의 내용은 데이터 파일이 될 것이고 데이터 파일에 저장된 레코드의 주소는 인덱스 목록에 있는 페이지 번호가 될 것입니다. 인덱스의 장단점인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로..

[Real Mysql 8.0] 5.2 MySQL 엔진의 잠금

5.2  MySQL 엔진의 잠금 Mysql 에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진 :MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미침스토리지 엔진 : 스토리지 엔진 간 상호 영양을 미치지 않음. 5.2.1GLOBAL LOCKFLUSH TABLES WITH READ LOCK 명령으로 획득 할 수 있다.MySQL 에서 제공하는 잠금 가운데 가장 범위가 크다.한 세션에서 글로벌 락을 획득하면 다른 세션에서 SELECT 를 제외한 대부분의 DDL ,DML 문장을 실행하는 경우 글로벌 락이 해제될 때까지 해당 문장이 대기 상태로 남는다.글로벌 락이 영향을 미치는 범위는 MySQL 서버 전체이다.작업 대상 테이블이나, 데이터베이스가 다르..

[Real Mysql 8.0] 5. 트랜잭션

5.1트랜잭션 트랜잭션은 작업의 완전성을 보장해줍니다. 즉 논리적인 작업셋을 모두 완벽하게 처리하거나, 모두 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능입니다.트랜잭션은 커밋되거나 롤벡됩니다. 5.1.1 MySql 에서의 트랜잭션트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두개이상의 쿼리가 있든 관계없이 논리적입 작업 셋 자체가 100% 적용되거나(commit을 실행했을때) 아무것도 적용되지않아야 (ROLLBACK) 함을 보장해주는 것입니다. InnoDB 스토리지엔진 (트랜잭션 지원) vs MyISAM (트랜잭션 미지원) 트랜잭션 관점에서 InnoDB 테이블과 MyISAM 테이블이 차이를 살펴보자 ..