데이터베이스 개체

maditation·2023년 4월 9일
0

혼자 공부하는 SQL

목록 보기
1/1
post-thumbnail

1. 데이터 베이스 개체

데이터베이스에서는 테이블 외에 인덱스, , 스토어드 프로시저, 트리거, 함수, 커서 등의 개체가 필요하다.

인덱스

데이터를 조회할 때 테이블에 데이터가 적다면 결과가 금방나오지만 많아질수록 결과과 나오는 시간이 많이 소요된다. 인덱스는 이런 경우 결과가 나오는 시간을 대폭 줄여줄 수 있다.

인덱스란 책의 목차를 알려주는 '찾아보기'와 비슷한 개념이다.

인덱스 실습

위와같은 테이블 구조에서 아래와 같은 쿼리를 수행하면

SELECT * FROM member WHERE member_name = '아이유';


결과가 잘 나온다.

여기서

이렇게 [Excution Plan(실행계획)] 탭을 클릭하면 Full Table Scan이라고 나온다. 이것을 해석하면 전체 테이블 검색 정도가 된다. 이러한 방법은 데이터가 매우 큰 경우 매우 오랜 시간이 소요된다.

인덱스로 찾기


인덱스를 만들어 준다. SQL 마지막의 ON member(member_name)의 의미는 member 테이블의 member_name열에 인덱스를 지정하라는 의미이다.


다시 쿼리문을 수행하고 [Excution Plan(실행계획)]을 확인하면

Non-Unique Key Lookup이라고 나온다. 자세한 사항은 추구 더 알아보도록 한다.

인덱스에서 한 가지 더 주의해야 할 점은 인덱스 생성 여부에 따라 결과가 달라지지는 않는다는것 입니다. 즉 책의 내용을 찾을 때 찾아보기가 있으면 시간을 단축하는 효과가 있지만, 책의 찾아보기가 없어도 책의 첫 페이지부터 찾아야 하기 때문에 시간이 오래 걸릴 뿐 어차피 동일하게 찾을 수 있습니다.

뷰는 테이블과 상당히 동일한 성격의 데이터베이스 개체입니다. 뷰를 활용하면 보안도 강화하고, SQL문도 간단하게 사용할 수 있습니다.

뷰 개념 이해하기
뷰를 한마디로 정의하면 '가상의 테이블'이라고 할 수 있다.
일반 사용자 입장에서는 테이블과 뷰를 구분할 수 없다. 즉, 일반 사용자는 테이블과 동일하게 뷰를 취급하면 된다. 다만 뷰는 실제 데이터를 가지고 있지 않으며, 진짜 테이블에 링크된 개념이라고 생각하면 된다.

뷰는 윈도우즈 운영 체제의 '바로 가기 아이콘'과 비슷한 개념.

뷰는 바로가기와 비슷한 개념으로 실체는 없으며 테이블과 연결되어 있는 것뿐입니다.

그렇다면 뷰의 실체는 무엇일까? 뷰의 실체는 바로 SELECT문이다.

뷰 실습

CREATE  VIEW member_view
AS
	SELECT * FROM member;

회원 뷰에 접근해보자,

select * from member_view;


결과는 동일하다. 그렇다면 뷰를 사용하는 이유는 무엇일까?

그 이유는 크게 2가지이다.

  • 보안에 도움이 된다.
  • 긴 SQL 문을 간략하게 만들 수 있다.

스토어드 프로시저

스토어드 프로시저를 통해 SQL 안에서도 일반 프로그래밍 언어처럼 코딩을 할 수 있다. 비록 일반 프로그래밍보다는 좀 불편하지만, 프로그래밍 로직을 작성할 수 있어서 때론 유용하게 사용된다.

스토어드 프로시저 개념 이해하기
스토어드 프로시저란 MySQL에서 제공하는 프로그래밍 기능으로 여러개의 SQL문을 하나로 묶어서 편리하게 사용할 수 있다.

스토어드 프로시저 실습하기

SELECT * FROM member WHERE member_name="나훈아";
SELECT * FROM product WHERE product_name = '삼각김밥';

두개의 sql문을 한번에 실행하는 프로시저를 만들어보자.

DELIMITER //    -- DELIMITER// ~ DELIMITER;는 스토어드 프로시저를 묶어주는 약속
CREATE PROCEDURE myProc() -- myProc()은 프로시저의 이름이다.
BEGIN
	SELECT * FROM member WHERE member_name = '나훈아';
    SELECT * FROM product WHERE product_name = '삼각김밥';
END //
DELIMITER;

프로시저 실행

CALL myProc();


result 탭이 2개 생성되고 정상 작동되는 것을 확인할 수 있다.

profile
금융 개발 전문가가 목표

0개의 댓글