728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 SQL을 보고 학습한 자료를 남깁니다.

 

데이터베이스 개체

뷰, 인덱스, 스토어드 프로시저, 트리거 등 데이터베이스 내에 있을 수 있는 오브젝트이다.

테이블이 대표적인 데이터베이스의 개체이다.

테이블을 돌리기 위해 나머지 필요한 개체들이 있다.

이 내용 하나 하나가 공부할 것이 있다.

 

인덱스

데이터를 조회할 때 데이터가 빠르게 나올 수 있도록 만드는 것이다.

실무라면 데이터가 몇백만건, 몇천만건 되면 컴퓨터가 느려지게 된다.

책의 찾아보기 개념과 거의 동일한 개념이다.

폭포수 모델이라는 글자를 찾아보라고 하면 1페이지부터 다 찾아봐야 한다.

그런데 찾아보기로 ㅍ을 찾으면

1페이지를 다 뒤지는 것 보다 두 세번 만에 찾을 수가 있다.

이것이 바로 인덱스의 도움 때문이다.

인덱스는 없어도 관계는 없다.

책 내용이 바뀌는 것은 아니다.

빨리 찾을 수 있는 도움을 주는 것이지 실무에서는 대용량의 데이터를 사용할 때는 너무 오래 걸려요.

실무에서는 인덱스를 반드시 사용한다.

SELECT * FROM member WHERE member_name = '아이유'; 를 실행을 한다.

result의 우측에 밑의 화살표를 클릭을 하면 여러 탭들을 볼 수가 있다.

그 중 Execution Plan을 클릭을 하면 다음과 같이 실행계획을 볼 수 있다.

빨간색으로 Full Table Scan 즉 전체 테이블을 뒤져서 아이유를 찾아냈다.

이것 사실 무지하게 오래 걸리는 일이다.

처음에 Index는 없다.

Index를 만들어준 다음에 진행을 해야 한다.

CREATE INDEX idx_member_name ON member(member_name); 명령어를 통해서 실행을 하면 눈에 보이는 결과는 없지만 

맨 아래 Output 창에 초록색 체크 표시로 인덱스 생성 쿼리문이 완료된 것을 볼 수가 있다.

이렇게 찾아보기를 만든 것이다.

다시 SELECT문을 실행을 하면

다음과 같이 Execution Plan(실행 계획)이 조금 바뀐 것을 볼 수가 있다.

원래 Full Table Scan인데

지금은 Non-Unique Key Lookup 인데 이를 인덱스를 사용해서 아이유를 찾아냈다는 의미이다.

엄청나게 빠른 결과이다.

진짜 데이터 건수가 많더라도 진짜 빠른 결과를 낼 수 있다.

 

뷰는 가상의 테이블이다. 진짜 데이터가 없다.

뷰는 마치 윈도우에 바로가기와 비슷한 개념이다.

바로가기 프로그램인 Microsoft Edge를 보면 다음과 같이 대상의 위치가 나온다.

이 디렉터리의 실행파일이 실제로 실행되는 것이다.

뷰 또한 비슷하다.

뷰도 내가 뷰를 실행한 것 처럼, 테이블을 실행한 것 처럼 착각하지만

실제로는 뷰에서 테이블을 가져와서 보여주는 것이다.

뷰가 아니라 테이블에 접근한 것과 동일한 효과를 내는 것이다.

뷰는 테이블을 SELECT하는 구문이다.

뷰에 SELECT가 작동을 해서 

뷰의 SELECT가 작동을 해서

다시 테이블에 접근을 해서 데이터를 가져와서 실행이 되는 것이다.

뷰를 직접 만들어보겠다.

SQL+ 버튼을 클릭을 하면 새 쿼리 창을 만들 수 있다.

CREATE VIEW 하고 뷰 이름을 지어줍니다. member_view

그리고 그 밑에 AS 하고

SELECT문을 입력을 하면

VIEW는 실제 SELECT문이에요

Output창의 #10번의 result를 보면 초록색 표시로 체크된 것을 볼 수 있다. Action과 Message 그리고 Duration/Fetch 창을 볼 수 있다. 실행된 쿼리문, 이에 대한 메시지 그리고 처리 시간 / Fetch 등을 확인해 볼 수 있다.

뷰 생성문이 완료된 것이다.

뷰를 다시 실행을 하면

데이터에 있는 SELECT문이 결과로 나오는 것을 볼 수가 있다.

 

스토어드 프로시저

SQL문은 프로그래밍 언어와는 조금 다르다.

하지만 이를 가능하게 해주는 것이 바로 스토어드 프로시저이다.

예를 들어 IF문 또는 반복문등을 SQL문으로 만들 수 있도록 도와주는 것이 바로 스토어드 프로시저이다.

만일 쿼리 탭을 닫을 때 실행도중 이와 같은 창이 나온다면 

저장하지 않을 것이므로 Don't Save 버튼을 클릭하면 된다.

만일 두 개의 쿼리문을 동시에 아주 자주 많이 사용한다고 가정을 해보자.

자주 까먹을 수가 있다. 그래서 이를 스토어드 프로시저를 만들어서 사용할 수 있다.

DELIMITER //과 DELIMITER; 는 두 명령문 사이의 쿼리문을 묶어주는 역할을 수행 한다.

다음 화면은 예약어로 이루어진 프로시저의 예시이다.

이름은 myProc이다. 

이를 실행을 하면 다음과 같은 Output 창에서 프로시저 생성문이 완료된 것을 볼 수 있다.

CALL 예약어를 통해서 프로시저를 실행할 수 있다.

실행을 하면 다음과 같이 두 개의 쿼리문이 실행된 것을 볼 수 있다.

탭이 두개이다. (Result3, Result4)

CALL만 갖고도 이 두개의 쿼리문을 실행한 것이다.

저장 프로시저가 프로그래밍 용어에 들어가서 사용할 수 있는 일이 많다.

 

감사합니다.

https://www.youtube.com/watch?v=lBk5YhLZevs&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=6

 

728x90
반응형
LIST

+ Recent posts