CS스터디 - 인덱스, 뷰, Join

이강민·2024년 10월 7일
1

커널360

목록 보기
54/56
post-thumbnail

인덱스

  • 테이블을 더 빠르게 조회하기 위한 참조 수단
  • 실무에서 매우 빈번히 사용 for 검색 속도 향상
  • 열 단위로 사용
  • 두 개의 열을 묶어서 인덱스로 사용 가능

특징

  • 인덱스가 없다면? 어쩔 수 없이 모든 테이블의 데이터를 스캔해야 한다.
  • 테이블을 가리키는 대상이기에 테이블 삭제되면 같이 삭제

부작용

  • 인덱스를 저장할 추가적인 저장 공간 필요
  • 인덱스 작성 시간도 있다
    • 행 데이터가 너무 많으면 이 시간이 오래 걸릴 수 있음
  • 검색이 아닌 다른 작업(insert, update, delete) 시 성능 악화

인덱스를 사용하기 좋은 열은 무엇?

  • 검색이 빈번하고 검색이 아닌 작업이 적은 열이 좋은 열이다.

종류

클러스터형 인덱스

  • Primary Key (우선 지정) / Unique + Not Null 제약 조건 지정 시 자동 생성
  • 테이블 당 하나
  • 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬

보조 인덱스

  • 테이블 당 여러 개 가능
  • 중복 가능
  • 고유키로 지정된 칼럼은 자동으로 보조 인덱스가 생성(Unique)
  • 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬 x

작성법

//생성
 CREATE INDEX 인덱스명 ON 테이블명 (열명); 
 
 // 조회
 SHOW INDEX FROM 테이블명;

//삭제 
DROP INDEX 인덱스명 FROM 테이블명;

  • 가상의 테이블
  • Select의 결과를 하나의 테이블처럼 사용
    • 쿼리 단순화 가능
    • 모든 데이터를 보여줄 필요 없을 때 사용

사용

// 뷰 생성
CREATE VIEW 뷰이름 AS SELECT;

// 뷰 삭제
DROP VIEW 뷰 이름;

조회는 제한이 없을지 모르나 삽입, 삭제가 되지 않을 수 있음

  • group by 로 만든 테이블에 대해서 업데이트, 삭제가 되지 않음

조인

여러개의 테이블을 하나로 묶는 방법

INNER JOIN

customer id와 products 테이블의 customer_id가 일치 하는 데이터로 합칠 수 있다.

SELECT 열명 FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건;

SELECT customers.name, customers.age, customers.address,
orders.id, orders.product_id, orders.quanitty, orders.amount 
FROM customers INNER JOIN orders ON 
customers.id = orders.customer_id;

# 각 테이블의 명칭을 명시 해줘야 한다.

LEFT OUTER JOIN

테이블1 모두 선택, 테이블2를 합치되 매칭되지 않으면 null로 처리 (right는 반대)

SELECT customers.name, orders.id AS order_id, orders.product_id, orders.quanitty, orders.amount 
FROM customers LEFT OUTER JOIN orders ON 
customers.id = orders.customer_id;

쿼리 실행 결과

FULL OUTER JOIN(UNION)

모든 데이터를 처리하되 없는 데이터는 null로 처리

SELECT 열명 
FROM 테이블명1
LEFT JOIN 테이블명2 ON 결합조건
UNION
SELECT 열명
FROM 테이블명1
RIGHT JOIN 테이블명2 ON 결합조건;
profile
AllTimeDevelop

0개의 댓글

관련 채용 정보