인덱스 : MySQL - 테이블을 더 빠르게 조회하기 위한 참조 수단 (책의 ‘찾아보기’와 유사) - 실무에서 매우 빈번히 사용 for 검색 속도 향상 - 열 단위로 사용 - 두 개의 열을 묶은 하나의 인덱스도 만들 수 있음
-> 인덱스가 없다면? 어쩔 수 없이 모든 테이블의 데이터를 스캔해야 한다 : 테이블을 가리키는 대상이기에 테이블 삭제되면 같이 삭제
인덱스의 부작용 - 인덱스를 저장할 추가적인 저장 공간 필요 - 인덱스 작성 시간도 있다: 행 데이터가 너무 많으면 이 시간이 오래 걸릴 수 있음 - 검색(SELECT)가 아닌 작업(INSERT, UPDATE, DELETE) 시 성능 악화 - 인덱스를 사용하기 좋은 열은 무엇일까?
인덱스의 종류 - 클러스터형 인덱스(Clustered index) - PRIMARY KEY (우선 지정) / UNIQUE + NOT NULL 제약 조건 지정 시 자동 생성 테이블 당 하나 - 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬 - * select 했을 때 primary key에 대해 자동 정렬되는 것은 이 때문 - 보조 인덱스(Secondary index) - 테이블당 여러 개 가능 - 중복 가능 - 고유키로 지정된 칼럼은 자동으로 보조 인덱스가 생성(UNIQUE 제약 조건) - 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬 X
(보조) 인덱스 생성: CREATE INDEX
인덱스 조회: SHOW INDEX
인덱스 삭제: DROP INDEX
인덱스 삭제: DROP INDEX 사용방법
뷰
뷰(view)란? - SELECT의 결과를 마치 테이블과 같이 간주 == 뷰 - 쿼리 단순화 가능 - 모든 데이터를 보여줄 필요가 없어짐
뷰 생성
뷰 삭제
뷰(view)에 대한 작업
JOIN
JOIN(조인)이란 - 관계형 데이터베이스의 핵심: 여러 개의 테이블을 하나로 묶는 방법 - 다음과 같은 두 테이블이 있을 때 어떻게 하나로 합칠 수 있을까? * 서브 쿼리로 여러 번 JOIN 할 수도 있음
열명 : 테이블명1과 테이블명2의 열명이 겹칠 경우 - 테이블명1.열명 혹은 테이블명2.열명
- 테이블명1과 테이블명2 결합 조건을 모두 만족하는 데이터만을 선택해 결합 (교집합)
OUTER JOIN - LEFT OUTER JOIN: 일단 테이블1 모두 선택, 테이블2를 합치되 매칭되지 않으면 NULL
- RIGHT OUTER JOIN: 일단 테이블2 모두 선택, 테이블1를 합치되 매칭되지 않으면 NULL - FULL OUTER JOIN: 두 테이블 모두 선택, 매칭되지 않으면 NULL - UNION( 쿼리의 결과를 합치기 )을 이용해 구현