Programming/DB

[DB/MySQL] Database - MySQL 기초 (index)

devssun 2018. 8. 10. 17:25
728x90
반응형

Database - MySQL 기초3 - index (https://opentutorials.org/course/195/1538)

심화 개념‼️‼️‼️‼️

  1. index (인덱스)

    • Database에 있는 데이터가 백만개 천만개 있는 경우 필요한 데이터를 찾아는데 시스템 상의 부하, 많은 시간이 소요될 수 있다.
    • Database 기반의 웹서비스를 만들었을 때 게시판을 조회할 때 index 문제로 오랜 시간이 걸린다면?? 아무도 사용하지 않을 것이다.
    • 물론 가볍게 사용하는 정도라면 index를 사용해서 만들 지 않아도 최근 컴퓨터의 성능은 좋기 때문에 빠른 처리가 된다. 하지만 그 반대일 때 index를 사용해서 빠르게 찾을 수 있도록 만들 수 있다.

    • 인덱스의 종류

      • primary : 중복되지않는 유일한 키
      • normal : 중복을 허용하는 인덱스
      • unique : 중복을 허용하지 않는 유일한 키
      • foreign : 다른 테이블과의 관계성을 부여하는 키
      • full text : 자연어 검색, myisam에서만 지원
    • key를 지정하게 되면 그 key들을 각각 인덱스라고 할 수 있다.

  1. primary key

  2. unique key

    • https://docs.microsoft.com/ko-kr/sql/relational-databases/tables/unique-constraints-and-check-constraints?view=sql-server-2017
    • unique key도 테이블에서 중복되지 않는 값을 뜻하는데 primary key와 다른 점을 갯수 차이가 있다. pk는 테이블마다 딱 하나만 가질 수 있는 반면, unique key는 한 테이블에 여러개를 가질 수 있다.
    • 고속으로 데이터를 가져올 수 있다.
    • 학번처럼 중복값을 허용하지 않을 때 사용하면 좋다. 만일 이미 등록되어있는 unique key와 같은 값을 넣으려고 하면 아래와 같은 에러가 발생한다.
    • ERROR 1062 (23000): Duplicate entry '0123' for key 'idx_number'
  3. normal key

    • 중복을 허용한다.
    • primary, unique보다 속도가 느리다.
    • 여러 개의 키를 지정할 수 있다.
  4. foreign key

    • 다른 테이블과의 관계성을 부여하는 키
    • 최근에는 많이 사용하지않고 만일 테이블끼리의 연관된 데이터의 조작, 삭제가 이루어지게 되면 코드상으로 연결된 데이터가 따라서 조작, 삭제될 수 있도록 하며 이 과정에서 문제가 발생했을 때 rollback 처리를 한다.
  5. full text

    • mysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다.
    • 한계점이 많이 존재함
      • mysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다. 전문검색엔진으로 lucene, sphinx 참고
      • 스토리지 엔진 중 myisam에서만 사용가능

인덱스의 정의 방법 ‼️‼️‼️‼️

  • 자주 조회되는 칼럼에 적용
  • 조회 시 오랜시간을 소모하는 컬럼에 적용
  • 데이터가 긴 경우 인덱스를 사용하지 않는다
반응형