46

쿼리 작성 및 최적화 (3)

GROUP BY 사용 시 주의사항 쿼리에 GROUP BY가 사용되면 그룹 키(GROUP BY 절에 명시된 칼럼)가 아닌 칼럼은 일반적으로 집합 함수를 감싸서 사용해야 한다. SELECT first_name FROM employees GROUP BY gender; 가져온 first_name 이 제일 큰 값인지, 제일 작은 값인지 아니면 중간의 값을 가져온 것인지 알 수 없다. 그렇기 때문에 가능하다면 GROUP BY 절에 명시되지 않은 칼럼은 반드시 집합 함수로 감싸서 사용하길 권장 GROUP BY .. ORDER BY NULL MySQL의 GROUP BY은 그룹핑과 정렬 작업을 동시에 수행한다. 실제 정렬 작업이 필요하지 않을 때는 정렬은 하지 않도록 쿼리를 작성할 수 있다. ⇒ order by null..

책/real mysql 2022.01.12

쿼리 작성 및 최적화 (2)

where 절의 비교 조건 사용 시 주의사항 NULL 비교 null도 하나의 값으로 인정해서 관리 null 비교는 is null 문자열이나 숫자 비교 그 타입에 맞춰 상수를 사용할 것을 권장 DATE나 DATETIME 과 문자열 비교 DATE나 DATETIME 타입의 값과 문자열을 비교할 때는 문자열 값을 자동으로 DATETIME 타입의 값으로 변환해서 비교를 수행 DATE와 DATETIME의 비교 DATETIME 타입의 값을 DATE 타입으로 만들지 않고 그냥 비교하면 MySQL 서버가 DATE 타입의 값을 DATETIME 으로 변환해서 같은 타입을 만든 다음 비교를 수행한다. 예를 들면 DATE 타입의 값 "2017-01-26" 과 DATETIME 타입의 값 "2017-01-26 00:00:00"을 ..

책/real mysql 2022.01.12

쿼리 작성 및 최적화 (1)

인덱스를 사용하기 위한 기본 원칙 인덱스 컬럼 가공 X 예시) salary * 10 인덱스 컬럼의 데이터 타입과 where 절의 데이터 타입이 같아야함 select * from tb_test where age=2 ( age(varchar(10), index ix_age(age) ) ⇒ 이런 경우 데이터 타입이 달라서 인덱스 풀스캔 하게됨 where 절의 index 사용 범위 제한 조건 동등 비교, in으로 구성된 조건이 인덱스를 구성하는 컬럼과 얼마나 좌측부터 일치하는가에 따라 다름 SELECT * FROM employees WHERE first_name='Kebin' OR last_name='Poly'; 위 쿼리에서 first_name='Kebin' 조건은 인덱스를 이용할 수 있지만 last_name=..

책/real mysql 2022.01.12

드라이빙 테이블 - 드리븐 테이블

👀 드라이빙 테이블 (DRIVING TABLE)이란? JOIN시 먼저 액세스 돼서 ACCESS PATH를 주도하는테이블 👀 드리븐 테이블(DRIVEN TABLE, INNER TABLE) 나중에 액세스 되는 테이블을 드리븐 테이블(DRIVEN TABLE, INNER TABLE) 조인시 영향 인덱스(INDEX)의 존재 및 우선순위 혹은 FROM절에서의 TABLE 지정 순서에 영향을 받음 많은 양의 데이터를 다룰 때, 드라이빙 테이블은 매우 중요하다. 예시 10000건의 데이터 A 5000건의 데이터 B 10000건을 먼저 드라이빙하게 된다면 -> 10000번 돌면서 B테이블 탐색 5000건을 먼저 드라이빙하게 된다면 -> 5000번 돌면서 탐색 결정 규칙 규칙기반 옵티마이저(Rule-Based Optimiz..

책/real mysql 2022.01.12

5. 인덱스(2) - 그외 인덱스

이전글에서 이어진 글입니다 https://balldev.tistory.com/59 5장. 인덱스 디스크 읽기 방식 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 상당함 저장 매체 DAS 컴퓨터의 본체와 달리 디스크만 있음 모두 SATA SAS와 같은 케이블로 연결되어 balldev.tistory.com 해시 인덱스 해시 인덱스는 동등 비교 검색에는 최적화 but 범위를 검색한다거나 정렬된 결과를 가져오는 목적으로는 사용할 수 없다. DBMS에서 메모리 기반의 테이블에 주로 구현 → 대용량 테이블용으로는 사용 X 구조 및 특성 실제 키 값과는 상관 없이 인덱스 크기가 작고 검색이 빠름 검색하고자 하는 값을 주면 해시함수를 거쳐서 키 값이 포함된 버켓을 알 수 있음. 그리고 하나..

책/real mysql 2021.12.30

5장. 인덱스

디스크 읽기 방식 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인 것들이 상당함 저장 매체 DAS 컴퓨터의 본체와 달리 디스크만 있음 모두 SATA SAS와 같은 케이블로 연결되어서 사용자에게는 같은 방식으로 사용됨 하지만 반드시 하나의 컴퓨터 본체에만 연결해서 사용 가능 → 컴퓨터가 동시에 공유하는 것이 불가능 NAS TCP/IP를 통해 연결됨 여러 컴퓨터에서 공유해서 사용할 수 있는 저장 매체지만 SATA/SAS 방식에 비해 속도가 느림 데이터 비용으로는 사용 X SAN 대용량의 스토리지 공간 여러 컴퓨터 사용 가능, 광케이블로 연결돼서 빠름 하지만 고가의 구축 비용 SSD 원판을 제거하고 메모리를 장착 → 기계적으로 회전 X 빠르게 데이터 읽고 쓰기 가능, 전원이 공급되지 않아도..

책/real mysql 2021.12.30

트랜잭션 격리 수준

이전글에 연장입니다.~ https://balldev.tistory.com/57 트랜잭션과 잠금 트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상 balldev.tistory.com 격리수준이란? 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것 Isolation level 종류 Read Uncommitted (level 0) SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 일관성을 유지하는 것이 불가능 Dirty read 발생 Read committed (l..

책/real mysql 2021.12.27

트랜잭션과 잠금

트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 하는 기능!!! 잠금 vs 트랜잭션 잠금 - 동시성을 제어하기 위한 기능 트랜잭션 - 데이터의 정합성을 보장하기 위한 기능 트랜잭션 정의와 특징 db의 상태를 변화시키기 위해 수행하는 단위 그리고 하나의 트랜잭션은 commit 되거나 rollback 되거나 합니다. 트랜잭션의 특징(ACID) atomicity(원자성) - 트랜잭션 연산은 모두 반영되던가 전혀 반영이 되지 않아야한다. consistency(일관성) - 성공적으로 완료하면 일관성 있는 데이터 베이스 상태로 변환 isolation(격리성) - ..

책/real mysql 2021.12.27

mysql 아키텍처

mysql 서버는 크게 mysql 엔진과 스토리지 엔진으로 구분 mysql 엔진 클라이언트로부터 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 sql파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심 sql 문장을 분석, 최적화 스토리지 엔진 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담 쓰기 또는 읽기를 요청 → handler 요청 , 여기서 사용하는 api → handler api mysql서버는 프로세스 기반이 아니라 스레드 기반 포그라운드 스레드 서버에 접속된 클라이언트 수 만큼 존재 백그라운드 스레드 innoDB 쓰기 작업은 지연 가능 읽기 작업은 지연 불가능!! 대부분 DBMS는 쓰기 작업을 버퍼링해서 일괄 처리하는 기능이 탑재돼..

책/real mysql 2021.12.21

성능 향상을 위한 인프라 구조

시스템 성능 지표 시스템 성능을 가리킬 때 응답과 처리량이라는 지표가 자주 사용된다. 응답 처리 하나당 소요 시간, 응답이 걸리는 시간 처리량 단위 시간당 처리하는 양, 초당 받아들이는 사용자 수 퍼센타일 실제 시스템에서는 단일 사용자 응답만으로는 부족하기 때문에 여러 사용자의 평균값을 이용한다. 이때 통계학에서 사용되는 퍼센타일 개념을 이용한다. 극단적으로 응답 시간이 긴 사용자는 다른 문제를 내포하고 있을 수 있기 때문에 오차라고 생각하고 평균값에 포함하지 않는다. 병목 현상 처리량을 제한하고 있는 요인 병목 지점 병목 현상이 발생하는 위치 어떻게 해결하는가? 각 서버의 처리량이나 응답 상황 로그를 취득해서 어느 서버가 병목 지점이 되고 있는지 찾아내는 것부터 시작해야 한다. 이러한 이유로 APM을 ..