TIL

250113 월 TIL

파란배개 2025. 1. 14. 10:15

JOIN과 UNION, VARCHAR과 CHAR의 관계, 인덱스

1. JOIN

INNER JOIN

  • 짝(파트너)가 있어야만 들어갈 수 있는 파티장이라고 보면 된다.
  • 두 테이블의 교집합 데이터를 조회. 즉, 양쪽 테이블에 공통적으로 존재하는 데이터만 가져온다.
SELECT * 
FROM table1 
INNER JOIN table2 
ON table1.id = table2.id;

OUTER JOIN

  • 짝이 있는 사람도 OK, 없는 사람도 OK. 파티장이라고 보면 된다.
  • 조건에 따라 공통 데이터와 함께 한쪽 테이블에만 존재하는 데이터도 조회 가능.

LEFT (OUTER) JOIN

  • 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블과 일치하는 데이터.

RIGHT (OUTER) JOIN

  • 오른쪽 테이블의 모든 데이터 + 왼쪽 테이블과 일치하는 데이터.

FULL OUTER JOIN

  • 양쪽 테이블의 모든 데이터. 일치 여부 상관없이 가져온다.
SELECT * 
FROM table1 
LEFT JOIN table2 
ON table1.id = table2.id;

2. UNION과 UNION ALL

  • UNION: 두 쿼리의 결과를 합치면서 중복된 데이터를 제거.
  • UNION ALL: 중복된 데이터를 제거하지 않고 모두 합친다.
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;

SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;

3. VARCHAR와 CHAR의 차이

  • VARCHAR: 가변 길이 문자열. 저장되는 문자열 길이에 따라 공간을 사용.
  • CHAR: 고정 길이 문자열. 정의된 길이만큼 공간을 항상 사용.

유형 특징

VARCHAR 메모리 효율적, 유동적 저장
CHAR 고정된 길이, 속도가 빠름

4. DELETE와 TRUNCATE의 차이

  • DELETE: 테이블의 데이터를 삭제하며, 조건을 지정할 수 있다.
    • 데이터만 삭제, 테이블의 구조와 인덱스는 유지.
    • 트랜잭션 가능 (롤백 지원).
  • TRUNCATE: 테이블의 모든 데이터를 삭제하며, 인덱스도 초기화된다.
    • 조건 지정 불가능.
    • 트랜잭션 불가능 (롤백 불가).
DELETE FROM table_name WHERE condition;

TRUNCATE TABLE table_name;

5. 인덱스

인덱스를 사용하는 이유

  • 빠르게 데이터를 검색하기 위해 사용한다.
  • 인덱스가 있으면 쿼리 성능이 크게 향상될 수 있다.

인덱스 생성 기준

  1. PK, UNIQUE, FK는 자동 생성: 기본적으로 주요 키에 대해 인덱스가 생성된다.
  2. 불필요하면 사용하지 않는다: 인덱스는 공간을 차지하고, 쓰기 성능을 저하시킬 수 있다.
  3. 운영 중 느려지면 추가: 초기 설계 시 불필요한 인덱스는 피하고, 필요 시 추가.
  4. 중복이 낮은 곳에 생성: 중복 값이 많으면 인덱스 효과가 감소.
  5. 자주 검색되는 컬럼에 생성: 검색 쿼리에 자주 사용되는 컬럼에 인덱스를 생성한다.
CREATE INDEX index_name ON table_name(column_name);

주의사항

  • 인덱스는 읽기 성능은 높이지만 쓰기 성능은 저하시킬 수 있다.
  • 지나치게 많은 인덱스는 오히려 성능 저하를 유발할 수 있다.

'TIL' 카테고리의 다른 글

250115 수 TIL  (1) 2025.01.15
250114 화 TIL  (0) 2025.01.14
250110 금 TIL  (0) 2025.01.10
250109 목 TIL  (0) 2025.01.09
250108 수 TIL  (0) 2025.01.08