티스토리 뷰
1. 인덱스란?
- 테이블의 특정 컬럼에 대한 검색 속도를 높이기 위해 사용하는 자료구조
- 장점: 검색 속도 향상
- 단점: 추가적인 저장 공간 사용, 삽입/수정/삭제 성능 저하
2. VIEW란?
- 하나 이상의 테이블을 가상의 테이블처럼 보여주는(논리적으로만 존재) 저장된 쿼리
- 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해 놓으면, 추후 쿼리는 간단한 형태로 표현할 수 있다.
- 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다. 뷰의 정의는 변경할 수 없으며, 삭제 후에는 재생성이 필요
- 장점: 코드 재사용, 보안(민감한 컬럼 숨기기), 복잡한 쿼리 단순화
- 테이블 구조가 변경되어도, 뷰를 사용하고 있는 응용프로그램은 변하지 않아도 된다는 장점을 가지고 있다
- 용도: 조회 전용 대시보드, 보고서 출력, 복잡한 쿼리 단순화, 접근 권한 분리(민감 정보 숨기기)
- 단점: 성능이 떨어질 수 있음(특히 중첩되거나 JOIN이 많은 경우)
* REPLACE
- 같은 이름의 뷰가 존재하면, 기존 뷰를 무시하고 대체하기 위해서 CREATE 대신 사용하는 키워드는 REPLACE이다.
따라서 기존 뷰를 수동으로 삭제할 필요가 없어 수정과 업데이트가 간단하다.
만약, 해당 뷰가 존재하지 않는 경우 뷰를 새롭게 생성한다.
3. 인덱스와 뷰의 차이
구분 | 인덱스 | 뷰 |
정의 | 조회 속도를 높이기 위한 자료구조 | 복잡한 쿼리를 저장한 가상 테이블 |
목적 | 빠른 검색/ where, join 조건 최적화 | 복잡한 SQL을 재사용하고 가독성 향상 |
물리저장 | 별도 저장 공간 있음 (B-tree 등 자료구조) |
기본적으로 저장 안함 (일반 뷰는 실시간 실행) |
갱신여부 | 테이블 변경 시 자동 반영 | 뷰는 항상 최신 데이터를 반영 |
4. 테이블과 VIEW의 차이
구분 | VIEW | TABLE |
정의 | 가상의 테이블 (쿼리 결과에 이름을 붙인 것) |
실제 데이터를 저장하는 객체 |
데이터 저장 | 저장 x, 실시간 조회 | 실제 데이터를 저장 |
작성 방식 | CREATE VIEW | CREATE TABLE |
수정가능여부 | 제한적(일부 조건 충족시만 가능) - 집계함수, JOIN 등이 있으면 수정 불가능 - 보통은 조회용으로 사용해서 수정 안함 |
가능(INSERT, UPDATE, DELETE) |
용도 | 복잡한 쿼리 단순화, 보안 목적 | 데이터 저장 및 기본 단위 구조 |
성능 | 실시간 계산 → 성능 저하 가능성 있음 | 직접 접근 → 상대적으로 빠름 |
영구성 | 뷰는 정의만 저장 (데이터는 원본 테이블에서 조회) |
테이블은 스키마와 데이터 모두 저장 |
5. VIEW가 많으면 좋을까?
- 적절하면 가독성, 보안, 유지보수에 용이하지만 너무 많으면 성능 저하, 관리 복잡의 문제가 있다
=> 자주 쓰는 복잡한 쿼리나 민감한 정보를 분리할 때 적절히 사용하는 것이 좋다
예: 인사팀 직원은 급여를 볼 수 있어야하고, 다른 직원들은 이름과 부서만 보게 하고 싶을 때
-- 직원 테이블
CREATE TABLE employees (
emp_id INT,
name VARCHAR(50),
department VARCHAR(50),
salary INT
);
-- 급여 정보를 제외한 뷰 생성
CREATE VIEW public_employee_info AS
SELECT emp_id, name, department
FROM employees;
SELECT * FROM public_employee_info;
-- 결과: emp_id, name, department (급여 안 나옴)
6. JOIN
구분 | (INNER) JOIN | OUTER JOIN |
의미 | 양쪽에 모두 존재하는 데이터만 연결 | 한쪽에만 있어도 출력(NULL 포함) |
데이터누락 | 한쪽에만 있는 데이터는 제외됨 | 포함됨(단, 없는 쪽은 NULL로 표시됨) |
주로 쓰는 경우 | 데이터 정합성이 확실할 때 | 일부 데이터 누락을 감안해야 할 때 |
종류 | - | LEFT, RIGHT, RULL OUTER JOIN |
- JOIN ON(=inner join)
- JOIN(=cross join) :모든 조합을 생성, 조건 없이 모든 행을 서로 짝지음
- FULL OUTER JOIN ON: 양쪽 테이블에 매칭이 없는 행도 포함, 일치하지 않는 값은 NULL로 채움
- A 또는 B에만 있는 데이터도 포함됨 => 모든 데이터를 보존
'AI > SQL' 카테고리의 다른 글
[SQL] 관계형대수, 계층형 질의, 재귀 (0) | 2025.04.17 |
---|---|
[SQL] SQL과 NoSQL (0) | 2025.04.17 |
[SQL] CAST, IN, ANY, ALL, 서브쿼리 (0) | 2025.04.13 |
[SQL] 이상 현상과 정규화 (0) | 2025.04.09 |
[SQL] 제약조건, 키(Key), 인덱스 (0) | 2025.04.08 |
- Total
- Today
- Yesterday
- C언어
- 습관
- 아침
- 스크랩
- 기초
- 30분
- 티스토리챌린지
- 실기
- 미라클모닝
- Ai
- 운동
- llm
- Python
- 고득점 Kit
- opic
- 갓생
- 아침운동
- 뉴스
- 루틴
- 영어회화
- 오픽
- 오블완
- SQL
- 빅데이터 분석기사
- ChatGPT
- 다이어트
- IH
- 경제
- 줄넘기
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |