인덱스
-
Real MySQL 8.0 8장 - 인덱스 정렬 및 스캔의 방향✏️ 스터디 모음집/RealMySQL 스터디 2023. 3. 26.
인덱스 생성시 기본적으론, 오름차순(ASC) 정렬로 인덱스가 생성된다. mysql 5.7 버전 이후의 버전에서 인덱스 생성 시, 인덱스를 구성하는 컬럼의 정렬 순서를 정 할 수 있다. 5.7 버전에서는 인덱스 생성시 아래 와 같이 ASC, DESC 키워드로 정렬 순서를 지정해 주어도, 실제로 내부적으로 오름차순(ASC)으로만 정렬된다. CREAT INDEX ix_teamname ON employees (team_name DESC) // 5.7 버전에서는 DESC로 생성해도 실제로는 ASC 로 정렬 됨. 8.0 버전 부터 복합 인덱스 생성시 각 컬럼마다 별개로 정렬 순서를 정할 수 있게 되었다. CREAT INDEX ix_teamname_userscore ON employees (team_name ASC,..
-
[Real MySQL] 인덱스 (2) - B-Tree 인덱스✍️ 개인 스터디 기록 2022. 12. 12.
B-Tree 인덱스 제일 상단에 루트노드 부터 시작해서 제일 하단 리프노드 까지 인덱스 페이지별로 나뉘어져 있다. 인덱스로 정한 키값이 정렬된 상태로 되어있다는 점이 중요하다. 실제 데이터파일의 경우 정렬이 되어있지 않고 임의의 순서로 저장된다. 인덱스테이블에는 키값만 저장되어있기 때문에 나머지 컬럼 정보를 가져오기 위해서는 실제 데이터 파일에서 해당 레코드를 찾아와야한다. InnoDB 엔진에서는 세컨더리 인덱스에서 B-Tree 탐색이 2번 일어난다. InnoDB 엔진에서는 아래 그림처럼 리프노드에서 프라이머리 키가 실제 데이터의 주소값 역할을 하는데, 그렇기 때문에 리프노드에서 프라이머리 키를 찾았으면, 찾은 프라이머리 키로 실제 데이터를 찾기 위해 프라이머리 키 인덱스 B-Tree를 또 탐색하는 과정..
-
[Real MySQL] 인덱스 (1) - 인덱스란? 인덱스의 구분✍️ 개인 스터디 기록 2022. 12. 12.
1. 디스크 읽기방식을 고려하자 랜덤 I/O와 순차I/O 디스크 헤더를 많이 움직이는 랜덤 I/O는 비용이 순차I/O보다 비용이 크다. SSD를 사용하면 랜덤 I/O의 비용을 줄일 수 있지만, 그래도 순차 I/O에 비해서는 성능이 떨어진다. 데이터베이스의 대부분의 작업은 작은 데이터를 빈번히 읽고 쓰는 작업이 대부분이기 때문에 랜덤 I/O가 일어나는데 쿼리 튜닝이란 이러한 랜덤 I/O 자체를 줄여주는것에 목적이 있다고 볼수 있다.(꼭 필요한 데이터만 읽도록 하는것!) 2. 인덱스란? DBMS의 인덱스도 SortedList와 같이 항상 정렬된 상태를 유지한다. 즉 항상 정렬된 상태를 유지하기 위해 데이터가 저장될 때마다 항상 값을 정렬해야한다. 그렇기 때문에 인덱스란 데이터의 저장 성능을 희생하고 읽기 속..