[내일배움캠프 Spring 4기] 74일차 TIL - 외래키 | 클러스터 인덱스와 논클러스터 인덱스

서예진·2024년 3월 17일
0

오늘의 학습 키워드

외래키
클러스터 인덱스와 논클러스터 인덱스


외래키

  • 외래키는 관계형 데이터베이스에서 나오는 개념
  • 한 테이블의 필드(또는 여러 필드)가 다른 테이블의 기본키(PK)를 가리키는 제약조건이다.
  • 데이터 일관성 유지를 가능하게 해주고 데이터의 무결성을 지켜준다.
  • 하지만, 외래키를 가진다는 것은 DB 입장에서는 제약조건이다. 즉, 제한을 의미한다.

외래키를 사용하지 않는다.

1. 성능상의 문제

  1. 외래키를 건다는 것은 DB 입장에서는 제약조건이기 때문에
  2. comment에 userId가 있을 텐데 이 userId가 실제로 존재하는 userId인지를 검사하는게 외래키
    1. 데이터 무결성에 도움을 주지만 넣지않는다.
    2. 유저가 80억이 있다고 치면 실제로 80억번의 검사를 해야만 데이터 무결성을 알 수 있다.
    3. index라는 개념이 등장

2. 아키텍처적인 문제

  • 서버도 여러대, DB도 여러개를 사용하기 때문에 애초에 외래키를 걸 수 없다.

장점

  • cascade를 사용하지 않는다. -> 외래키가 없어서 사용할 수 없다.

클러스터 인덱스와 논클러스터 인덱스

클러스터 인덱스

  • 클러스터 인덱스는 테이블마다 1개씩 존재한다.
    • 바로 PK
  • 왜 이름이 클러스터 인덱스? - 물리적으로 배열을 만듦 → 클러스터링 → 클러스터 인덱스
  • 물리적으로 정렬되기 때문에 일반적으로 검색속도가 빠르다.

논클러스터 인덱스

  • 클러스터 인덱스를 제외한 나머지 인덱스는 모두 논클러스터 인덱스이다.
  • 인식하고 있지 않고 있지만, 사실 우리는 논클러스터 인덱스를 이미 사용하고 있었다.
    • Unique Key
    • Foreign Key(DB 마다 정책이 다르지만 MySQL은 인덱스가 걸림)
    • 따라서 유니크 키는 인덱스지만, 인덱스라고 해서 유니크 키이거나 FK인건 아니다.

      복합키를 왜 쓸까? - 속도 상승(성능) ⇒ 복잡한 기능에서 효과가 있으나 그때가서는 ElasticSerch를 사용하는 것이 좋음

profile
안녕하세요

0개의 댓글