SQL 첫걸음 28-30강

Andrew·2022년 1월 17일
0

SQL 첫걸음

목록 보기
8/9

본 글은 아사이 아츠시 저 '하루 30분 36강으로 배우는 완전 초보의 SQL 따라잡기'를 기반으로 작성되었습니다.

28. 인덱스 구조

인덱스

테이블에 붙여진 색인. 검색속도 향상의 역할을 한다.
매우 빠른 검색 알고리즘 중 하나인 이진탐색(Binary search)를 사용하여 where 구에 인덱스로 지정된 열이 조건으로 들어가게 될 시, 매우 빠르게 검색할 수 있다.

cf. Binary search?
정렬된 자료에서 사용할 수 있으며, 현재 값이 찾으려는 값보다 큰 지, 작은 지를 판단하여 절반씩 검색 범위를 줄여나간다.
따라서 시간복잡도(Time complexity)는 O(log n)으로 매우 빠르다.

1백 만개의 데이터가 존재할 시, 최대 20번의 검색이면 원하는 값을 찾을 수 있다.
(2^10 = 1024, 1000^2 = 1,000,000, 2^20은 약 1백만)

이진탐색 알고리즘을 이용하기 때문에 같은 값이 존재하게 되면 성능이 하락할 수 있다. 되도록 유일성이 보장된 값을 탐색하는 것이 바람직하다.

29. 인덱스 작성과 삭제

인덱스 작성

create index isample65 on sample62(no);

인덱스를 생성하려는 테이블의 column을 지정해준다. 복수의 열을 지정하는 것도 가능하다.

인덱스 삭제

drop index isample65 on sample62;

MySql의 경우 인덱스가 스키마의 객체가 아닌, 테이블 내의 객체로 존재하기 때문에, 인덱스와 테이블 명을 같이 적어준다.

EXPLAIN

create index isample65 on sample62(a);
explain select * from sample62 where a = 'a';

인덱스 작성을 통해 쿼리의 성능이 향상되었는지 확인하기 위해 EXPLAIN 명령어를 사용한다. 실제로 명령이 실행되진 않고, 어떤 실행 계획이 세워졌는지 확인할 수 있다.

실행 계획을 먼저 구성함으로써 속도를 최적화 시키는 과정을 거치게 된다. 마치, Spark의 DAG를 통해 최적화를 하는 것과 비슷한 개념으로 이해하면 될 것 같다. EXPLAIN은 이 계획을 확인하는 명령이다.

30. 뷰 작성과 삭제

뷰란 본래 데이터베이스 객체로 등록할 수 없는 SELECT 명령을, 객체로서 이름을 붙여 관리할 수 있도록 한 것이다. 자주 사용되는 서브쿼리 부분은 뷰로 임시로 저장함으로써 더욱 간결한 쿼리문을 작성할 수 있다.

다만, 가상 테이블이기 때문에 따로 저장공간을 가지지 않는다. 따라서 INSERT, UPDATE, DELETE와 같은 명령은 사용을 삼가는 것이 좋다.

뷰 생성

create view sample_view_67 as select * from sample54;

select * from sample_view_67;

select 문의 AS 명령어와는 달리 view의 AS 명령어는 생략할 수 없다.

view를 생성할 때 원래 테이블의 열 이름을 바꿔 생성할 수 있다. 이 경우 select 문으로 선택된 열과 개수가 일치해야 한다.

create view sample_view_672(n,v,v2) as
	select no, a, a*2 from sample54;
select * from sample_view_672 where n = 1;

뷰 삭제

drop view sample_view_672;
profile
조금씩 나아지는 중입니다!

0개의 댓글