Database/MySQL
[MySQL] 인덱스
[MySQL] 인덱스
2023.08.30컴퓨터에서 CPU나 메모리같은 주요 장치는 전자식이지만, 데이터를 저장하는 HDD는 기계식이다. 이런 HDD를 대체하기 위해 전자식 저장 도구인 SSD가 등장했다. SSD는 전자식으로 데이터에 접근해 훨신 빠르고, 플래시 메모리를 장착하고 있어 전원이 공급되지 않아도 데이터가 삭제되지 않는다. MySQL에서 인덱스는 테이블에서 칼럼의 값과 해당 레코드가 저장된 주소를 키 - 값으로 저장하는 자료구조이다. 인덱스는 정렬된 상태로 보관되기에 특정 레코드에 접근할 때 인덱스를 사용하면 빠르게 접근할 수 있다. 데이터베이스 테이블에 대한 참조로 생각하면 된다. B-Tree 인덱스 B-Tree는 데이터베이스의 인덱싱 알고리즘 중 가장 일반적으로 사용되고 가장 먼저 도입된 알고리즘이다. (Balanced Tree)..
[MySQL] 트랜잭션과 락
[MySQL] 트랜잭션과 락
2023.08.28데이터베이스에서 트랜잭션은 하나 이상의 SQL 그룹으로, 그룹 단위로 실행이 성공하거나 실패함을 보장한다. 트랜잭션의 주요 속성으로는 ACID가 있다. Atomicity : 트랜잭션 단위 작업은 모두 완료되거나 모두 실패한다. Consistency : 데이터베이스를 일관성 있는 상태로만 다뤄야 한다. (계좌이체에서 인출됐지만 입금되지 않은 상태가 없어야 함) Isolation : 동시에 실행되는 트랜잭션들끼리는 서로 영향을 주지 않는다 Durability : 트랜잭션이 커밋된 후 해당 내용은 영구적으로 보존되어야 한다. 트랜잭션이 길어질수록 리소스를 많이 사용하게 되니 최소한의 코드에 트랜잭션을 적용하자. 특히 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제하자. 락 (Lock) 은 데이터베이스에서 ..
[MySQL] 아키텍처
[MySQL] 아키텍처
2023.08.25MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 구분된다. MySQL 엔진 : 클라이언트와의 연결을 관리하는 커넥션 핸들러와 쿼리 최적화를 수행하는 옵티마이저가 중심을 이룬다. 스토리지 엔진 : 실제 데이터를 저장하고 관리한다. MySQL 엔진에서 데이터를 쓰거나 읽어야 할 경우 스토리지 엔진에 핸들러 요청을 보낸다.(InnoDB, MyISAM...) 스토리지 엔진은 MySQL 서버에 플러그인 형태로 추가돼 각 테이블마다 가장 적합한 스토리지 엔진을 선택해서 사용할 수 있다. InnoDB는 트랜잭션 처리에 강하고, MyISAM은 빠른 읽기 연산에 강하다. 스토리지 엔진들의 특성을 고려해 테이블별로 적합한 스토리지 엔진을 적용할 수 있다. 스토리지 엔진 뿐만 아니라 검색어 파서, 인증 도구 등도 모두..