본문 바로가기
728x90

ComputerScience/RealMySQL12

8.인덱스 - 클러스터링 인덱스 이번 포스트에서는 MySQL InnoDB 스토리지 엔진의 클러스터링 인덱스에 대해서 알아보도록 하겠습니다. 클러스터링 인덱스 클러스터링이란 여러 개를 하나로 묶는다는 의미로 주로 사용됩니다. MySQL 서버에서 클러스팅이란 테이블의 레코드를 비슷한 것(프라이머리 키를 기준으로)들 끼리 묶어서 저장하는 형태로 구현되는데, 이는 주로 비슷한 값들을 동시에 조회하는 경우가 많다는 점에서 착안되었고 MySQL에서는 InnoDB 스토리지 엔진에서만 지원합니다. 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하기 때문에 프라이머리 키에 대해서만 적용됩니다. 여기서 중요한 것은 프라이머리 키 값에 의해 레코드의 저장 위치가 결정되고 프라이머리 키 값이 변경되면 레코드의 물리적인 저장 위치가 바뀌어야 한다는 것을 의.. 2023. 1. 2.
8.인덱스 - B-Tree Index의 가용성과 효율성 이번 포스트에서는 B-Tree Index의 가용성과 효율성에 대해 알아보도록 하겠습니다. 비교 조건의 종류와 효율성 다중 컬럼 인덱스에서 각 컬럼의 순서와 그 컬럼에 사용되는 조건이 동등 비교("=", "IN")인지 또는 범위 조건(">", ">=", "", " 2022. 12. 25.
8.인덱스 - B-Tree Index를 통한 데이터 읽기 이번 포스트에서는 B-Tree Index를 통한 데이터 읽기에 대해서 알아보도록 하겠습니다. 인덱스 레인지 스캔 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식입니다. 인덱스의 접근 방법 가운데 가장 대표적인 방법이고 밑에서 설명할 두 방식보다 빠른 방식입니다. 루트 노드부터 브랜치 노드와 최종 리프 노드까지 찾아 들어가 필요한 레코드의 시작점을 찾고 리프 노드의 레코드를 순서대로 읽습니다. 만약 스캔하다가 리프 노드의 끝까지 읽으면 리프 노드간의 링크를 이용해 다음 리프 노드를 찾아서 스캔하고 최종적으로 스캔을 멈춰야 할 위치에 다다르면 지금까지 읽은 레코드를 사용자에게 반환하고 쿼리를 종료합니다. 위 사진은 인덱스만 읽는 경우를 보여주는 사진입니다. 하지만 B-Tree 인덱스의 리프 노드를 스.. 2022. 12. 21.
8.인덱스 - B-Tree Index 2022.12.14 - [RealMySQL] - 8.인덱스 - 인덱스란? 8.인덱스 - 인덱스란? 이번 포스트에서는 MySQL의 인덱스에 대해서 알아보겠습니다. 인덱스 DBMS에서 데이터의 저장(INSERT, UPDATE, DELETE)성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능입니다. SELECT 쿼리 문장 rbsks.tistory.com 전 포스트에 이어서 B-Tree 인덱스에 대해서 자세히 알아보도록 하겠습니다. B-Tree Index(Balanced Tree Index) B-Tree는 컬럼의 원래 값을 변경하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지됩니다. 전문 검색과 같은 특수한 요건이 아닌 경우를 제외하고 대부분의 인덱스는 거의 B-Tree를 사용할 정도로 일반적인 .. 2022. 12. 18.
8.인덱스 - 인덱스란? 이번 포스트에서는 MySQL의 인덱스에 대해서 알아보겠습니다. 인덱스 DBMS에서 데이터의 저장(INSERT, UPDATE, DELETE)성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능입니다. SELECT 쿼리 문장 WHERE 조건절에 사용되는 컬럼이라고 해서 전부 인덱스로 생성하면 데이터 저장 성능이 떨어지고 인덱스의 크기가 비대해져 오히려 역효과가 날 수 있습니다. 인덱스는 크게 프라이머리 키(Primary Key)와 보조 키(Secondary Key)로 구분할 수 있습니다. 프라이머리 키(Primary Key) 그 레코드를 대표하는 컬럼의 값으로 만들어진 인덱스를 의미합니다. 이 컬럼은(때로는 복합 키로 컬럼의 조합이 될 수 있음) 테이블에서 해당 레코드를 식별할 수 있는 기준값이 되기 .. 2022. 12. 14.
5.트랜잭션과 잠금 - MySQL 격리 수준 이번 포스트에서는 MySQL 격리 수준에 대해서 알아보겠습니다. MySQL 격리 수준 여러 트랜잭션이 동시에 변경 및 조회를 수행할 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하려는 데이터를 볼 수 있게 허용할지 말지를 결정하여 일관성을 유지하는 설정입니다. 격리 수준은 크게 밑의 4가지로 나뉩니다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ(MySQL InnoDB Default) SERIALIZABLE READ UNCOMMITTED 각 트랜잭션 변경 내용이 commit이나 rollback 여부에 상관없이 다른 트랜잭션에서 조회 가능한 격리 수준입니다. 이처럼 다른 트랜잭션에서 처리한 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상을 DI.. 2022. 12. 12.
728x90