일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 비관적락
- 이진탐색
- 연결리스트
- fetch
- JPQL
- SQL프로그래밍
- FetchType
- querydsl
- exclusive lock
- 다대다
- 유니크제약조건
- 동적sql
- eager
- 다대일
- PS
- 지연로딩
- 일대다
- execute
- 낙관적락
- 스토어드 프로시저
- 스프링 폼
- 즉시로딩
- dfs
- CHECK OPTION
- 힙
- 백트래킹
- 데코레이터
- 연관관계
- BOJ
- shared lock
- Today
- Total
흰 스타렉스에서 내가 내리지
데이터베이스 개체 본문
데이터베이스에서는 테이블 외에 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수, 커서 등의 개체도 필요하다.
요약
인덱스 | 데이터를 조회할 때 결과가 나오는 속도를 획기적으로 빠르게 해준다. |
뷰 | 테이블의 일부를 제한적으로 표현할 때 주로 사용한다. |
스토어드 프로시저 | SQL에서 프로그래밍이 가능하도록 해준다. |
트리거 | 잘못된 데이터가 들어가는 것을 미연에 방지하는 기능을 한다. |
인덱스
인덱스(index)란 책의 제일 뒤에 수록되는 '찾아보기'와 비슷한 개념이다.
찾아보기를 통해 먼저 해당 언어를 찾고 바로 옆에 적혀 있는 페이지로 이동하는 효율적인 방법을 사용하는 것이다.
'Full Table Scan' 이라고 나오는데, 이는 '전체 테이블 검색'이다.
즉, 처음부터 끝까지 조회를 해서 '아이유'를 찾은 것이다.
* 테이블에 인덱스 생성
CREATE INDEX idx_member_name ON member(member_name);
위 SQL을 실행하면 인덱스가 생성된다.
SQL의 마지막에 ON member(member_name) 의 의미는 member 테이블의 member_name 열에 인덱스를 지정하라는 뜻이다.
이제 다시 SQL문으로 데이터를 검색해보고 Execution Plan 탭을 보면,
이제는 'Full Table Scan' 대신 'Non-Unique Key Lookup' 이라고 나온다.
Key Lookup은 인덱스를 통해 결과를 찾았다는 뜻이다.
이런 방법은 인덱스 검색(Index Scan)이라고 한다.
뷰
뷰는 테이블과 매우 동일한 성격의 데이터베이스 개체이다.
뷰를 활용하면 보안도 강화하고, SQL 문도 간단하게 사용할 수 있다.
뷰(view)를 한 마디로 정의하면 '가상의 테이블'이다.
뷰는 실제 데이터를 가지고 있지 않으며, 진짜 테이블에 링크돤 개념이라고 생각하면 된다.
뷰는 실체는 없으며 테이블과 연결되어 있는 것 뿐이다.
CREATE VIEW member_view AS SELECT * FROM member;
이제 회원 테이블(member)이 아닌 회원 뷰(member_view)으로 접근이 가능하다.
스토어드 프로시저
스토어드 프로시저(stored procedure)란 MySQL에서 제공하는 프로그래밍 기능으로, 여러 개의 SQL 문을 하나로 묶어서 편리하게 사용할 수 있다.
SQL을 묶는 개념 외에 C, 자바, 파이썬과 같은 프로그래밍 언어에서 사용되는 연산식, 조건문, 반복문 등을 사용할 수 있다.
DELIMITER //
CREATE PROCEDURE myProc()
BEGIN
SELECT * FROM member WHERE member_name = '나훈아';
SELECT * FROM product WHERE product_name = '삼각김밥';
END //
DELIMITER ;
첫행과 마지막 행에 구분문자라는 의미의 DELIMITER // ~ DELIMITER ; 문이 있다.
이것은 스토어드 프로시저를 묶어주는 약속이다.
그리고 BEGIN과 END 사이에 SQL 문을 넣으면 됩니다.
앞에서 만든 스토어드 프로시저를 호출하기 위해서 CALL 문을 실행하면 된다.
CALL myProc();
데이터베이스 개체를 만들기 위해서는 CREATE 개체_종류 개체_이름 ~~의 형식을 사용했는데,
스토어드 프로시저를 삭제하려면 DROP 개체_종류 개체_이름 의 형식을 사용한다.
'SQL' 카테고리의 다른 글
데이터 변경을 위한 SQL 문 (CRUD) (0) | 2022.07.29 |
---|---|
SQL 문법 기초 2 - SELECT 관련 (0) | 2022.07.27 |
SQL 문법 기초 - SELECT 관련 (0) | 2022.07.24 |
[MYSQL WorkBench] 데이터베이스 모델링 툴 (0) | 2022.07.24 |
[Sequelize] 게시글 삭제 구현 팁 (0) | 2022.05.26 |