본문 바로가기

데이터베이스

(MySQL) Selection연산 기본과 Index Performance

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com

 

 

Selection, Projection 연산


 

Selection 연산, Projection 연산에 대해서는 여기에서 말씀드렸었습니다.

가장 기초적인 예제와 함께 사용해보겠습니다.

 


예제

DB는 launchpad.net에서 제공하는 test-db를 사용했습니다.

DB

1. 테이블의 총 레코드 개수 확인하기

employees 테이블의 총 개수 확인하기

select count (*) from employees;

300024개의 record가 있다는 것을 알 수 있습니다.

 

2. 테이블의 데이터 조회하기

employee 테이블의 데이터를 최대 10개까지 조회하기

select * from employees limit 10;

테이블에 record가 너무 많아서 최대 10개까지만 조회하도록 했습니다.

 

3. 테이블의 데이터 조건으로 찾기

employees 테이블의 PK인 emp_no로 record 조회하기

select * from employees where emp_no=10001;

4. Projection 연산으로 원하는 칼럼만 찾기

employees 테이블에서 원하는 칼럼만 조회하기

select emp_no, first_name, last_name from employees where emp_no=10001;



 

 

Index에 따른 Selection 연산의 속도 차이 (매우 중요)


RDB는 검색에 최적화된 DB라고 말씀드렸었습니다.

그리고 그 검색에는 B-트리가 사용된다고도 말씀드렸었습니다.

 

MySQL에서는 PK와 FK에 자동적으로 인덱스를 달아줍니다.

그래서 PK나 FK로 record를 조회한다면 그 속도가 매우 빠릅니다.

그러나 자동으로 Index가 등록되지 않는 칼럼으로 조회한다면 어떻게 될까요?

 

그렇다면 실제 속도 차이가 얼마나 나는지 보겠습니다.


1. 인덱스가 없을 때

인덱스가 없는 last_name과 first_name으로 조회를 한다면

select * from employees where last_name='Facello' and first_name='Georgi';

0.09초가 걸리는 것을 볼 수 있습니다.

 

2. 인덱스가 있을 때

first_name과 last_name을 묶어서 사용하는 인덱스를 만들어주고

Selection을 한다면

속도가 매우 빨라졌습니다.

데이터의 개수가 sample에서는 30만 개밖에 안되지만, 현업에서는 더더욱 많은 데이터를 다룰 확률이 높기 때문에

차이가 많이 날 것입니다.

 

아래 그림을 보면 실제로 index가 없을 때는 거의 30만 개에 가까운 모든 데이터를 다 뒤졌지만

index가 있을 때는 단 2개만 뒤졌다는 것을 알 수 있습니다.


 

결론


index를 달아주는 것이 매우 중요하다.

RDB는 index를 통한 빠른 read가 핵심이기 때문에! 반드시 사용해주는 것이 좋다.

'데이터베이스' 카테고리의 다른 글

MySQL Join 기본  (0) 2021.03.31
MySQL 기본 명령어  (0) 2021.03.31
키, 외래 키, 참조 무결성 제약 조건  (0) 2021.03.17
데이터베이스 기본 개념  (0) 2021.03.11
데이터의 종류  (0) 2021.03.03