조회(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(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`), 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 |
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 |