index

Seoung Young Oh·2023년 3월 22일
0

SQL

목록 보기
2/3

index란?

  • 색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터
  • 테이블 내의 1개의 컬럼 또는 여러 개의 컬럼을 이용하여 생성
  • primary key, unique설정은 자동으로 인덱스를 생성

단점

  • 인덱스를 저장하기 위한 별도의 저장공간 필요
  • 데이터를 추가하거나 수정하는데 더 많은 시간이 필요함

따라서,

  • 데이터의 변경이 자주 일어나지 않는 경우에 사용
  • 한 테이블에 저장된 용량이 클경우 사용
  • 두개 이상의 컬럼이 where, join조건으로 자주 사용되는 경우 사용
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` char(4) NOT NULL,
  `address` varchar(50) NOT NULL,
  `department` enum('국문과','영문과','컴퓨터공학과','전자공학과','물리학과') NOT NULL,
  `introduction` text NOT NULL,
  `number` char(255) NOT NULL,
  PRIMARY KEY (`id`),  //**PRIMARY KEY index**
  UNIQUE KEY `idx_number` (`number`) USING BTREE,  //**UNIQUE KEY index**
  KEY `idx_department` (`department`),//**NORMAL KEY index**
  KEY `idx_department_name` (`department`,`address`), //**NORMAL KEY(중복키) index**
  FULLTEXT KEY `idx_introduction` (`introduction`) //FULLTEXT index - myisam한정
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

//insert data
INSERT INTO `student` VALUES (1, '이숙경', '청주', '컴퓨터공학과', '저는 컴퓨터 공학과에 다닙니다. computer', '0212031');
INSERT INTO `student` VALUES (2, '박재숙', '서울', '영문과', '저는 영문과에 다닙니다.', '0512321');
INSERT INTO `student` VALUES (3, '백태호', '경주', '컴퓨터공학과', '저는 컴퓨터 공학과에 다니고 경주에서 왔습니다.', '0913134');
INSERT INTO `student` VALUES (4, '김경훈', '제천', '국문과', '제천이 고향이고 국문과에 다닙니다.', '9813413');
INSERT INTO `student` VALUES (6, '김경진', '제주', '국문과', '이번에 국문과에 입학한 김경진이라고 합니다. 제주에서 왔어요.', '0534543');
INSERT INTO `student` VALUES (7, '박경호', '제주', '국문과', '박경호입니다. 잘 부탁드립니다.', '0134511');
INSERT INTO `student` VALUES (8, '김정인', '대전', '영문과', '김정인입니다. 대전에서 왔고, 영문과에 다닙니다.', '0034543');

인덱스의 종류

  • primary : 중복되지 않는 유일한 킨
  • normal : 중복을 허용하는 인텍스
  • unique : 중복을 허용하지 않는 유일한 키
  • foreign : 다른 데이블과 관계성을 부여하는 키
  • full text : 자연어 검색, myisam에서만 지원

Primary key

  • 각 행을 테이블 안에서 식별하는 유일무이한 키
  • 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야한다.
  • where문을 사용해서 조회할 때 가장 고속으로 데이터를 가져올 수 있다.
  • 테이블 마다 primary key는 단 하나만 가질 수 있다.

Unique Key

  • 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야한다.
  • primary key보다는 느릴 수 있으나, 고속으로 데이터 조회 가능
  • 여러 개의 unique key를 저장 할 수 있다.

Normal Key

  • 중복을 허용
  • primary, unique보다는 속도가 느림
  • 여러개의 키를 지정할 수 있다.

Full Text

  • 긴 데이터안에서 원하는 데이터를 가져올 수 있다.
  • myisam에서만 사용이 가능

인덱스의 정의 방법

생성 : CREATE INDEX <인덱스명> ON <테이블명>(컬럼명1,컬럼명1..)
삭제 : ALTER TABLE <인덱스명> DROP INDEX <인덱스명>
조회 : show index from <테이블명>

동일한 데이터를 조회해도, index지정이 되어 있는 경우 더 빠르게 조회된다.

  • primary key, unique설정은 자동으로 인덱스를 생성
  • 자주 조회되는 칼럼에 적용
  • 조회 시 오랜시간을 소모하는 컬럼에 적용
  • 데이터가 긴 경우 인덱스를 사용하지 않는다.

출처

https://opentutorials.org/course/3161/19549
https://girrr.tistory.com/122

0개의 댓글