훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
Selection, Projection 연산
Selection 연산, Projection 연산에 대해서는 여기에서 말씀드렸었습니다.
가장 기초적인 예제와 함께 사용해보겠습니다.
예제
DB는 launchpad.net에서 제공하는 test-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 |