데이터베이스를 구성하는 개체들에 대해서 알아보자.
- 테이블 : 데이터베이스의 핵심 개체
- 인덱스 : 데이터를 조회할 때 결과가 나오는 속도를 향상시킨다.
- 뷰 : 테이블의 일부를 제한적으로 표현할 때 사용한다.
- 스토어드 프로시저 : SQL에서 프로그래밍이 가능하도록 해 준다..
- 트리거 : 잘못된 데이터가 들어가는 것을 방지해준다.
- 기타 : 함수, 커서 등...
아래 화면에 빨간 색 구역에 Full Table Scan이라는 글씨가 보일 것이다. 해당 화면은 테이블에 인덱스를 지정해주지 않았을 때 나오는 것으로, 어떤 값을 검색하는 명령을 수행할 때 테이블의 모든 값을 스캔하여 찾을 것이라는 의미이다. 지금처럼 적은 양의 데이터에서 검색할 때에는 문제가 없겠지만, 대용량의 데이터베이스에서 특정 데이터를 찾기 위해 모든 값을 뒤져봐야 한다면 오랜 시간이 걸릴 것이다. 그러니 우리는 테이블에 인덱스를 생성해 줄 것이다.
인덱스를 생성하기 위해 아래의 SQL문을 입력하고 실행한다. member_name에 대한 인덱스를 생성하라는 의미다. 눈으로 보이는 결과물은 없지만, 아래 결과 화면을 보면, 위의 화면과 달라진 점이 있을 것이다.
CREATE INDEX idx_member_name ON member(member_name);
간단히 말하자면 생성된 인덱스를 활용하여 검색을 할 것이라는 의미다. 작은 글씨로 보이는 Query cost가 0.65에서 0.35로 검색하는 데 필요한 비용이 감소했음을 확인할 수 있다.
뷰는 SELECT문으로 이용할 수 있다. 아래 내용으로 실습해보자. shop_db를 선택하고 다음과 같은 코드를 입력하고 실행해보자.
CREATE VIEW member_view
AS
SELECT * FROM member;
뷰가 생성되었다. 그러면 이제 생성된 뷰를 확인하기 위해 아래의 코드를 입력하고 실행해보자. member_view에 접근하는 코드이다. 그 결과 member를 select하는 것과 같은 결과가 나옴을 확인할 수 있다.
SELECT * FROM member_view;
MySQL에서 여러 개의 SQL문을 하나로 묶어 편리하게 사용할 수 있다. 이를 통해 다른 언어에서 사용되는 연산식, 조건문, 반복문 등을 사용할 수도 있다. 이에 대한 자세한 내용은 7장에서 학습하고, 지금은 간단한 실습으로 스토어드 프로시저가 무엇인지만 알아보자.
shop_db를 선택하고 다음과 같은 코드를 입력하고 실행해보자.
SELECT * FROM member WHERE member_name='나훈아';
SELECT * FROM product WHERE product_name='삼각김밥';
그러면 member_name이 나훈아인 데이터에 대한 정보와 product_name이 삼각김밥인 데이터에 대한 정보가 나올 것이다. 위의 명령어를 자주 쓸 것이라고 가정해보자. 매번 같은 동작을 수행할 때마다 코드를 하나하나 입력하면 시간도 오래 걸리고 비효율적이다. 이 때 스토어드 프로시저를 활용하여 보다 편리하게 명령을 수행할 수 있다.
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM member WHERE member_name='나훈아';
SELECT * FROM product WHERE product_name='삼각김밥';
END //
DELIMITER ;
위의 코드를 입력하고 실행하면, myProc()이라는 프로시저가 생성된다. 생성된 프로시저를 활용하는 방법은 간단하다. CALL 예약어 뒤에 프로시저 이름을 붙이기만 하면 끝이다.
CALL myProc();
해당 내용을 실행하면 위의 두 번의 SELECT문을 입력했을 때와 같은 결과가 나올 것이다.