스터디/Real MySql 스터디 (사내) 8장 인덱스 (3) 2023. 10. 29. 클러스터링 인덱스 클러스터링이란 레코드를 비슷한것들끼리 묶어서 저장한다. InnoDB 엔진에서만 지원 PK 에 대해서만 적용됨. PK 는 값에 따라 저장되는 위치가 변경되는데 즉 값이 변경되면 저장되는 위치가 변경된다는 뜻이다 리프 노드에 레코드의 모든 칼럼이 저장돼있다 PK 가 없는 경우 PK 대체 칼럼의 선택 순서 PK 가 있다면 PK 가 클러스터링 키로 선택 PK 가없다면 NOT NULL 옵션의 유니크 인덱스중 첫 번째 인덱스를 클러스터링 키로 선택 1, 2 조건이 모두 충족되지 않을 경우 자동으로 증가되는 유니크 값을 만들어 클러스터링 키로 선택 이 경우 사용자는 해당키를 사용할 수 없으므로 꼭 명시적으로 PK 를 만들어주자 PK 가 세컨더리 인덱스에 미치는 영향 만약 세컨더리 인덱스가 레코드가 .. 8장 인덱스 (2) 2023. 10. 29. B-Tree 인덱스를 통한 데이터 읽기 인덱스 레인지 스캔 검색해야 할 인덱스의 범위가 결정됐을때 사용하는 방식, 일단 시작해야 할 위치를 찾으면 그때부터 리프노드의 레코드만 순서대로 읽으면 됨 인덱스 자체의 정렬 특성으로 인해 해당 인덱스를 구성하는 칼럼의 정순/역순으로 정렬된 상태로 레코드를 가져옴 레코드 한 건 한 건 단위로 랜덤 I/O가 일어남 ( 인덱스는 정렬 돼 있을지라도 해당 인덱스의 레코드 주소는 재각각일 것이기 때문) 인덱스를 통해 읽어야 할 레코드가 20~25%를 넘으면 테이블에서 직접 읽는게 효율적임 인덱스 레인지 스캔의 처리 인덱스 탐색 : 인덱스에서 조건을 만족하는 값이 저장된 위치 탐색 인덱스 스캔 : 탐색된 위치부터 필요한 만큼 인덱스를 차례대로 읽음 레코드 읽기 : 인덱스 키.. 8장 인덱스 (1) 2023. 10. 29. 디스크 읽기 방식 데이터를 읽는 절차 : 디스크의 플래터를 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더를 이동시킨 후 데이터를 읽는것 (HDD 기준) 3개의 페이지를 읽는 과정에서 랜덤 I/O : 3번의 시스템 콜을 요청, 디스크의 헤드를 3번 움직임 순차 I/O : 1번의 시스템 콜 만으로 접근 가능 인덱스 레인지 스캔은 주로 랜덤 I/O 를 사용, 풀 테이블 스캔은 순차 I/O 를 사용 큰 테이블의 레코드 대부분을 읽는 작업에선 인덱스를 사용하지 않고 풀 테이블 스캔을 사용하는게 유리할 수 있음 쿼리를 튜닝하는 것은 결국 랜덤 I/O 를 줄여주는 것 인덱스 B-Tree 알고리즘 : 칼럼의 값을 변형하지 않고 인덱싱 Hash 인덱스 : 값을 변형해서 인덱싱, 전방(Prefix) 일치와 같이 값.. 이전 1 다음