[MySQL] 인덱스, 변수

2020. 9. 29. 22:43Database/MySQL

1. 인덱스 (Index)

1) 인덱스

테이블에 대한 동작의 속도를 높여주는 자료 구조이다. 인덱스는 테이블 내의 1개의 컬럼 혹은 여러개의 컬럼을 이용하여 생성한다. 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다. 일반 서적의 뒷부분에 구성 되어있는 찾아보기 같은 역할을 수행한다. PK와 UNIQUE 설정 시 자동으로 인덱스가 생성이 되며 INSERT, DELETE, UPDATE 속도를 약간 희생하고 SELECT 쿼리에 의한 검색 속도를 향상시킨다. 데이터의 양이 많고 검색이 변경보다 빈번한 경우에 사용한다.

 

하지만 인덱스를 저장하기 위해서는 별도의 저장공간이 필요하며 데이터를 추가하거나 수정하는데 더 많은 시간이 필요한 만큼 속도가 저하된다.

 

인덱스는 전체 데이터 중에서 10% - 15% 이내의 데이터를 검색하는 경우, 두 개 이상의 컬럼이 WHERE절이나 조인 조건으로 자주 사용되는 경우,  한 번 입력된 데이터의 변경이 자주 일어나는 경우, 한 테이블에 저장된 데이터 용량이 상당히 클 경우 효율적으로 사용된다.

2) 인덱스 종류

종류 설명
PRIMARY KEY 매우 빠름, 중복되지 않는 값, 테이블마다 한개
UNIQUE KEY 빠름, 중복되지 않는 값, 테이블마다 여러개
FOREIGN KEY 빠름, 중복을 허용, 테이블마다 여러개
NORMAL KEY 느림, 중복을 허용, 테이블마다 여러개
COMPOSITE KEY 느림, 여러 개의 컬럼을 포함해서 지정, 테이블마다 여러개
FULLTEXT 느림 (MyISAM에서만 사용 가능하며 한글 검색이 잘 안됨)

3) 인덱스 사용법

// 인덱스 확인
mysql> SHOW INDEX FROM [TABLE명];

// 인덱스 생성
ALTER TABLE [TABLE명] INDEX [INDEX명]([필드명]);
ALTER TABLE [TABLE명] INDEX [INDEX명]([필드명], [필드명]);
ALTER TABLE [TABLE명] UNIQUE INDEX [INDEX명]([필드명]);

 

 

 

2. 변수

1) 변수

변하는 데이터가 저장될 수 있는 공간으로 메모리 공간을 빌려 이름을 붙여 놓고 원하는 데이터를 저장해서 사용한다. 명명 규칙으로는 알파벳, '_', '$', '.'로 구성하며 MySQL 5 버전대 부터 대/소문자 구분을 하지 않는다.

2) 변수 사용법

// 변수 데이터 조회
mysql> SELECT @[변수명];

// 변수 설정 및 사용
mysql> SET @[변수명]=[데이터];

// 다른 SQL문 내에서 변수에 저장된 데이터를 불러 올 경우
mysql> [SQL문] @[변수명] [SQL문];

// 다른 SQL문 내에서 변수에 데이터를 저장할 경우
mysql> [SQL문] @[변수명]:=[데이터] [SQL문];

[참고] Database - Practice - 인덱스, 변수

728x90