티스토리 뷰

MySQL

(1) 6장. 데이터베이스와 SQL

soo__ 2022. 1. 13. 19:21

(1) 6장. 데이터베이스와 SQL

28~30강 인덱스와 뷰


인덱스 (색인 or 목차) == 정렬

: 테이블에 대한 동작 속도를 높여주는 자료구조

  • 고속의 검색(select, where) 동작

  • 레코드 접근 관련 효율적인 순서 매김 동작

  • 테이블 내의 1개 또는 여러 개의 컬럼을 이용하요 생성

  • 카디널리티가 높은순 → 낮은순으로 구성하는 것이 성능에 더 도움

  • 인덱스는 테이블에 의존하는 객체로 테이블을 삭제하면 인덱스도 함께 삭제된다

    • 오라클 / DB2 ; 인덱스는 스키마 객체 → 스키마 내에 이름이 중복되지 않도록 관리
    • SQL Server / MySQL ; 인덱스는 테이블 내 객체 → 테이블 내에 이름이 중복되지 않도록 관리
  • 인덱스에 쓰이는 대표적 검색 알고리즘은 Binary search (이진 트리에는 중복하는 값을 등록할 수 없음 → 유일성을 지님)

  • PK 컬럼에는 자동적으로 인덱스가 생성되므로, NOT NULL UNIQUE 제약 조건이 걸림


클러스터링 인덱스

  • 유의 사항
    • 클러스터형 인덱스는 인덱스 자체의 리프 페이지가 곧 데이터의 페이지로 인덱스 자체에 데이터가 포함되어 있어 검색 성능이 좋지만, 테이블당 한 개만 생성이 가능하다. 다만 데이터의 입력/수정/삭제는 느리므로 어느 컬럼에 클러스터형 인덱스를 생성하느냐에 따라 성능이 좌지우지될 수 있다.
    • 비 클러스터형 인덱스는 별도의 페이지에 구성되는 인덱스로, 데이터가 위치하는 포인터를 저장한다. 따라서 클러스터형 인덱스보다 검색 속도는 느리지만, 데이터의 입력/수정/삭제는 더 빠르다. 또한 여러 개 생성이 가능하지만, 남용할 경우 오히려 시스템 성능을 떨어뜨리는 결과를 가져온다

EXPLAIN 구절

  • DESCRIBE 동의어로 MySQL이 SELECT 명령문 실행 시 어떤 방법으로 진행되는지에 대한 정보를 얻기 위한 수단

  • select_type

  • type (join 타입)

  • possible_keys

    • 쿼리 처리를 위해 MySQL이 고려한 인덱스 후보

  • key

    • possible_keys 중에서 실제로 사용한 인덱스(키)
  • key_len

    • MySQL이 사용하려고 결정한 인덱스(키)의 길이
    • 이 값으로 MySQL이 복수 컬럼 key 중 얼마나 많은 부분을 사용하는지 알 수 있음
    • key 칼럼이 NULL이라면, 이 값도 NULL
  • rows

    • 쿼리를 실행하기 위해 조사해야 하는 열의 숫자
  • filtered

    • rows * filtered / 100 = 전 테이블과 조인된 레코드 수
    • 조건에 따라 필터 되어 취득하는 레코드의 % 수치를 보여줌 (예상치)
  • extra (얼마나 효과적인 join을 실행하고 있는지 확인 가능)

  • select문에서 인덱스를 태우기 위해서는, 최소한 첫 번째 인덱스 조건은 where절에 포함되어야 한다


view

  • 가상 테이블


'MySQL' 카테고리의 다른 글

(6) 7장. 복수의 테이블 다루기  (0) 2022.01.20
(5) 5장. 집계와 서브쿼리  (0) 2022.01.18
(4) 3장. 정렬과 연산  (0) 2022.01.17
(3) 4장. 데이터의 추가, 삭제, 갱신  (0) 2022.01.16
(2) 2장. 테이블에서 데이터 검색  (0) 2022.01.16
공지사항
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31