Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

mysql index 를 적용해야 속도가 빨라진다 vs full scan

MYSQL, 20215 min read

1. Full table scan

Full table scan

A full table scan (also known as a sequential scan) is a scan made on a database where each row of the table is read in a sequential (serial) order and the columns encountered are checked for the validity of a condition

전체 테이블 검색(순차 검색이라고도 함)은 데이터베이스에서 테이블의 각 행을 순차적(시리얼) 순서로 읽고 발견된 열이 조건의 유효성을 검사하는 검색입니다

2.index 정의

Database index

A database index is a data structure that improves the speed of data retrieval operations(데이터 검색 작업) on a database table (at the cost of)(-을 희생하여,비용을 지불하여) additional writes and storage space to maintain the index data structure.

데이터베이스 인텍스는 데이터베이스 테이블에서 데이터 검색 작업의 속도를 증진시키는 자료 구조이다 추가 쓰기와 저장공간을 희생하여 인덱스 데이터 구조를 유지하기 위해서

Indexes (are used to)(~ 하는데 사용되다) quickly (locate)(위치하고 있다) data without having to search every row in a database table every time a database table is accessed.

인덱스들은 빠르게 데이터를 위치하는데 사용된다. 데이터베이스 테비을에 모든 행을 검색하는 것 없이 데이터베이스 테이블에 액세스할 때마다.

2022-02-09

배경

  1. api 가 전체 멤버를 조회하고 있다.
  2. 회원은 10만건 이상의 데이터이다
  3. 조회시 로딩이 오래 걸린다.

개선 방법

인덱스는 특별한 종류의조회 테이블데이터베이스 검색 엔진에서 테이블에서 데이터 검색 속도를 높이는 데 사용 (특히 select 쿼리와, where 절의 속도를 높입) (but INSERT 그리고 UPDATE 쿼리 성능 저하)

검색조건에 사용되는 id ,meber_id 등 에 index를 걸어준다

인덱스 생성 구문

CREATE INDEX index_name
ON table_name (column1, column2, ...);
//출처: https://www.w3schools.com/sql/sql_create_index.asp

(tip)중복 값을 허용하지 않는 UNIQUE INDEX 도 존재함, 인덱스 생성 구문은 데이터베이스마다 다름

index 를 어느 컬럼에 걸어야할까?

지금 개발팀에서는 slow-query 가 발생할 경우 개발자에게 알림이 온다 찾아보니 index 를 걸어야하는 특정 컬럼들이 존재한다고 한다

mysql 책 기록

디스크 읽기 방식? 랜덤 I/O 순차 I/O

데이터베이스의 성능 튜닝은 어떻게 디스크 I/O 를 줄이느냐가 관건 디스크의 성능은 디스크의 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐

일반적으로 쿼리를 튜닝하는 것은 랜덤 I/O 자체를 줄여주는 것이 목적 쿼리를 처리하는 데 꼭 필요한 데이터만 읽도록 쿼리 개선

인덱스 레인지 스캔은 데이터를 읽기 위해 주로 랜덤 I/O 사용 풀 데이터 스캔은 순차 I/O 를 사용 그래서 큰 테이블의 레코드 대부분을 읽는 작업에서는 인덱스를 사용하지 않고 풀 테이블 스캔을 사용하도록 유도할 때도 있다.

인덱스란? 색인?

SortedList 는 저장되는 값을 할상 정렬된 상태를 유지하는 자료구조 DBMS 의 인덱스도 저장되는 컬럼의 값을 이용해 항상 정렬 상태를 유지

-> 인덱스가 많은 테이블은 당연히 insert,update,delete 문장의 처리가 느리다 하지만 찾아보기용표(인덱스)를 가지고 있기 때문에 select 문장은 매우 빠름

ArrayList 값을 저장되는 순서 그대로 유지하는 자룓구조 데이터 파일은 저장된 순서대로 별도의 정렬 없이 그대로 저장

20240419

dbms 에는 내가 원하는 데이터를 빨리 찾을 수 있는 인덱스 자료 구조가 있음 b-tree 인덱스를 잘못 지정하면 오히려 성능이 나빠질 수 있다 중복되지 않고 유일한 열을 선택하면 인덱스로 지정하면 검색 속도가 빨라진다.

참고

https://medium.com/javarevisited/indexes-when-to-use-and-when-to-avoid-them-39c56e5a7329

© 2024 by GwiyeomGo Tech Blog. All rights reserved.