DB/MySQL

· DB/MySQL
MySQL 서버로 요청된 쿼리는 결과는 동일하지만, 내부적으로 그 결과를 만들어내는 방법은 매우 다양하다. 이런 다양한 방법 중에서 어떤 방법이 최적이고 최소의 비용이 소모될지 결정해야한다. MySQL에서도 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. MySQL 서버를 포함한 대부분의 DBMS에서는 옵티마이저가 이러한 기능을 담당한다. MySQL에서는 EXPLAIN이라는 명령으로 쿼리의 실행 계획을 확인할 수 있는데, EXPLAIN 명령의 결과에는 상당히 많은 정보가 출력된다, 이러한 내용들을 제대로 이해하려면 옵티마이저에 대해 지식을 갖추고 있어야 한다. 스트리밍 방식 -..
· DB/MySQL
클러스터링 인덱스 - 클러스터링 : 클러스터링이란 여러개를 하나로 묶는다는 의미로 주로 사용됨 , 클러스터링 인덱스도 비슷하다 MySQL에서 클러스터링 인덱스는 InnoDV스토리지 엔진에서만 지원하며, 나머지 스토리지 엔진에서는 지원되지 않는다 - 클러스터링 인덱스는 테이블의 프라이머리 키에 대해서만 적용된다 - 즉, 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 ㅍ ㅛ현한다. - 프라이머리 키 값에 의해 레코드의 저장 위치가 결정된다 - 프라이머리 키 값으로 클러스터링 된 테이블은, 프라이머리 키 값 자체에 대한 의존도가 상당히 크기 때문에 신중히 프라이머리 키를 결정해야 한다. - 프라이 머리 키 값에 의해 레코드의 저장위치가 결정되므로 클러스터링 인덱스와 클러스터링..
· DB/MySQL
트랜잭션이란? 작업의 완전성을 보장해 주는 것 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상(paritial upadte)이 발생하지 않게 만들어주는 기능이다. 잠금과 트랜잭션의 차이 잠금 : 동시성을 제어하기 위한 기능 트랜잭션 : 데이터의 정합성을 보장하기 위한 기능 * 격리수준 : 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. MySQL에서의 트랜잭션 - 트랜잭션은 꼭 여러개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념이 아니라, 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두개의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적..
· DB/MySQL
본 글은 1회독을 겨우한 자의 정리본으로 도움이 되지 않을 수 있습니다 4-1-1. MySQL 전체 구조 mysql은 크게 mysql 엔진 / 스토리지 엔진으로 나뉘어져 있음 1) mysql 엔진 : 커넥션 핸들러 / SQL 파서 / 전처리기 / 옵티마이저 2) 스토리지 엔진 : mysql엔진은 dbms의 두뇌에 해당하는 처리를 수행, 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담함. mysql 엔진과 스토리지 엔진 사이에 데이터를 주고받는 것이 핸들러 API 4-1-2. mysql 스레딩 구조 - mysql 서버는 프로세스 기반이 아니라 스레드 기반으로 작동함 - 이는 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있음 1) 포그라운..