✏️ 스터디 모음집
-
1장 데이터 저장 구조 및 I/O 메커니즘✏️ 스터디 모음집/친절한 SQL 튜닝 2024. 4. 15.
1. 인덱스 레인지 스캔 vs 풀스캔 풀스캔은 항상 느리다? 무조건 쿼리는 인덱스를 타야한다? -> NO "인덱스 레인지 스캔은 큰 테이블에서 소량의 데이터를 읽을때 효율적이다. " 2. SQL이 느리다면 십중팔구 I/O 때문 디스크 I/O 때문 디스크 I/O = SLEEP 디스크 I/O가 발생하는동안 프로세스는 wait 상태로 빠진다. 3. 데이터베이스 저장 구조 테이블스페이스 : 세그먼트를 담는 콘테이너, 여러개의 데이터 파일로 구성 세그먼트 : 테이블, 인덱스 처럼 데이터 저장공간이 필요한 오브젝트 익스텐트 : 공간을 확장하는 단위 블록 : 사용자가 입력한 레코드를 실제로 저장하는 공간, 페이지 익스텐트 내 블록은 연속적인 공간 익스텐트 끼리는 연속된 공간이 아니다. 테이블 세그먼트 헤더에는 각 익..
-
Docker-Compose로 InnoDB 클러스터 구축 실습 환경 구성하기✏️ 스터디 모음집/RealMySQL 스터디 2023. 7. 2.
https://dev.mysql.com/blog-archive/docker-compose-setup-for-innodb-cluster/ MySQL :: Docker Compose Setup for InnoDB Cluster In the following we show how InnoDB cluster can be deployed in a container context. In the official documentation (Introducing InnoDB Cluster), InnoDB is described as: MySQL InnoDB cluster provides a complete high availability solution for MySQL. MySQL She dev.mysql.com Re..
-
Real MySQL 8.0 - 9.3 인덱스 컨디션 푸쉬다운✏️ 스터디 모음집/RealMySQL 스터디 2023. 5. 21.
위 그림과 같이 인덱스 컨디션 푸쉬 다운을 활성화 하면, 복합인덱스 테이블에서 인덱스를 활용하지 못하는 조건이라도 인덱스 테이블 내에서 모든 체크 조건을 처리할 수 있으면, 불필요한 랜덤 디스크 I/O 읽기를 수행 하지 않는다. 인덱스 컨디션 푸쉬다운 활성화 여부 확인하기 optimizer_switch 시스템 변수 내 index_condition_pushdown 설정을 통해 index_condition_pushdown을 사용할지 아닐지를 제어할 수 있다. set optimizer_switch='index_condition_pushdown=on'; show variables like 'optimizer_switch'; 인덱스 컨디션 푸쉬다운 테스트 해보기 테스트용 테이블 준비 - 더미 csv 파일 impo..
-
Real MySQL 8.0 - 9.3 고급 최적화 - MySQL의 조인 방식들✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
테스트 데이터 생성 DELIMITER $$ DROP PROCEDURE IF EXISTS gen_data$$ CREATE PROCEDURE gen_data( IN v_rows INT ) BEGIN DECLARE i INT DEFAULT 1; create table tb_test1( no bigint, col1 varchar(100), col2 varchar(100), col3 varchar(100) ); WHILE i 1 and b.no > 2; Nested Loop Join의 경우 실행계획의 Extra 컬럼에 별도 표시되는 항목이 없다. 😱 Nested Loop Join에서 주의 할 점 어떤 테이블이 먼저 액세스 되느냐에 따라서 속도의 차이가 크게 날 수 있다. 그렇기 때문에 어느 테이블을 드라이빙 테이..
-
Real MySQL 8.0 8장 - 인덱스는 왼쪽이 중요하다.✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
B-Tree 인덱스의 특징은 왼쪽 부터 오른쪽으로 값이 정렬되있다는 것이다. 여기서 왼쪽이란, 하나의 컬럼 내에서 뿐만 아니라 다중 컬럼 인덱스의 컬럼간 순서도 의미한다. 1. 한 컬럼 내에서 왼쪽이 정해지지 않아서 인덱스를 활용하지 못하는 경우 LIKE 검색에서 왼쪽 부분이 정해 지지 않은 경우 인덱스 레인지 스캔이 불가능 하다. 한 컬럼 내의 데이터를 스캔 할 때 왼쪽 텍스트 부터 오른쪽 순서로 탐색이 이루어지기 때문이다. LIKE 절에 왼쪽이 특정 된 경우 explain select * from tb where name like 'a%'; type : range => 인덱스 레인지 스캔 왼쪽이 특정된 경우 인덱스를 활용하는 것이 가능하다. LIKE 절에 왼쪽이 특정 되지 않은 경우 explain s..
-
Real MySQL 8.0 8장 - 인덱스 정렬 및 스캔의 방향✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
인덱스 생성시 기본적으론, 오름차순(ASC) 정렬로 인덱스가 생성된다. mysql 5.7 버전 이후의 버전에서 인덱스 생성 시, 인덱스를 구성하는 컬럼의 정렬 순서를 정 할 수 있다. 5.7 버전에서는 인덱스 생성시 아래 와 같이 ASC, DESC 키워드로 정렬 순서를 지정해 주어도, 실제로 내부적으로 오름차순(ASC)으로만 정렬된다. CREAT INDEX ix_teamname ON employees (team_name DESC) // 5.7 버전에서는 DESC로 생성해도 실제로는 ASC 로 정렬 됨. 8.0 버전 부터 복합 인덱스 생성시 각 컬럼마다 별개로 정렬 순서를 정할 수 있게 되었다. CREAT INDEX ix_teamname_userscore ON employees (team_name ASC,..
-
Real MySQL 8.0 7장 - MySQL 암호화✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 26.
응용프로그램 단에서 암호화 VS 데이터 베이스 단에서 암호화 응용프로그램 단에서 암호화 데이터의 암호화과정을 응용프로그램 단에서 수행하는 경우를 말한다. 주로 중요한 정보를 가진 컬럼 단위로 암호화를 수행한다. 응용프로그램 단에서 데이터를 암호화 해 넣을 경우, 암호화된 컬럼은 인덱스를 생성 하더라도 인덱스를 100% 활용하지 못할 수 있다. where 절에서 = 검색을 제외 한, BETWEEN … AND 와 같은 범위 기반 검색이나 ORDER BY 후 LIMIT 을 걸어 몇개만 데이터를 가져오는 경우에 암호화 되기 전 값을 기준으로 정렬할 수 없기 때문이다. 데이터베이스 단에서 암호화 MySQL 자체에서 암호화를 수행하는 경우를 말한다. 테이블 단위로 암호화를 적용한다. 보안 감사에서 필수적으로 언급되..
-
Real MySQL 8.0 5장(2) - 트랜잭션의 격리수준✏️ 스터디 모음집/RealMySQL 스터디 2023. 2. 26.
트랜잭션의 격리 수준(isolation level)이란? 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회중인 데이터를 볼수있게 할지, 못보게 할지를 결정하는 것 격리수준의 종류와 3가지 문제 위 표에서 아래로 갈수록 격리 수준이 높아지고, READ UNCOMMITED 의 경우 DIRTY READ 문제가 발생하기 때문에 일반적인 데이터베이스에서는 거의 사용하지 않는다. SERIALIZABLE 의 경우도 동시 처리 성능이 낮기 때문에 동시성 처리가 중요한 데이터베이스에서는 거의 사용되지 않는다. 오라클 같은 DBMS에서는 주로 READ COMMITTED 수준을 많이 사용하며, MySQL에서는 REPEATABLE READ 수준을 많이 사용한다. 트랜잭션 격리수준을 테스트 하..