조회(SELECT) - 인덱스(index)


  • 인덱스

색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터


  • 인덱스의 종류

설명 

primary

중복되지 않는 유일한 키 

normal

중복을 허용하는 인덱스 

unique 

중복을 허용하지 않는 유일한 키 

foreign 

다른 테이블과의 관계성을 부여하는 키 

full text 

자연어 검색, myisam에서만 지원 


  • 인덱스의 정의 방법

자주 조회되는 속성(컬럼)에 적용

조회 시 오랜시간을 소모하는 속성에 적용

데이터가 긴 경우 인덱스 사용하지 않음


  • 테이블 재설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` tinyint(4NOT NULL AUTO_INCREMENT,
  `name` char(4NOT NULL,
  `address` varchar(50NOT NULL,
  `department` enum('국문과','영문과','컴퓨터공학과','전자공학과','물리학과'NOT NULL,
  `introduction` text NOT NULL,
  `number` char(255NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_number` (`number`) USING BTREE,
  KEY `idx_department` (`department`),
  KEY `idx_department_name` (`department`,`address`),
  FULLTEXT KEY `idx_introduction` (`introduction`)
ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
 
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');
cs


  • primary key
1
PRIMARY KEY (`id`),
cs

테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 함

where 문을 이용해 데이터를 조회할 때 가장 고속으로 데이터를 가져옴

테이블마다 딱 하나의 primary key가 존재


1
select * from student where id=3;
cs

  • unique key
1
UNIQUE KEY `idx_number` (`number`) USING BTREE,
cs

테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 함

고속으로 데이터를 가져옴

여러개의 unique key를 지정 가능 -> 즉, 여러 속성들을 unique로 지정 가능


1
select * from student where number=0534543;
cs

  • normal key

1
KEY `idx_department` (`department`),
cs
중복을 허용
primary, unique보다 느림
여러개의 키 지정 가능

1
select * from student where department='국문과'
cs


  • Full Text
1
FULLTEXT KEY `idx_introduction` (`introduction`)
cs

검색기능

mysql의 기본 설정(ft_min_word_len)이 4로 되어 있으므로 최소 4글자 이상 입력하거나 이 값을 조정해야 함

msql은 한글 검색이 잘 안됨

스토리지 엔진 중 myisam에서만 사용 가능


1
SELECT introduction FROM student WHERE MATCH (introduction) AGAINST('영문과에');
cs


  • 중복키
1
KEY `idx_department_name` (`department`,`address`),
cs

하나의 키에 여러개의 속성(컬럼)을 포함

인덱스가 아닌 인덱스를 만드는 스타일

즉, 키를 정의할 때 여러 개의 속성을 포함시키는 것


1
select * from student where department='국문과' AND address='제주';
cs



실습




primary key를 이용한 검색


unique key를 이용한 검색


normal key를 이용한 검색


Full Text 검색(한글이라 잘 안됨)


중복를 이용한 검색

'Programming > DataBase' 카테고리의 다른 글

SQL - 테이블(9)  (0) 2018.03.21
SQL - 테이블(7)  (0) 2018.03.21
SQL - 테이블(6)  (0) 2018.03.21
SQL - 테이블(5)  (0) 2018.03.21
SQL - 테이블(4)  (0) 2018.03.21

+ Recent posts