Index
색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터
- 종류
ㆍprimary : 중복되지 않는 유일한 키
ㆍnormal : 중복을 허용하는 인덱스
ㆍunique : 중복을 허용하지 않는 유일한 키
ㆍforeign : 다른 테이블과의 관계성을 부여하는 키
ㆍfull text : 자연어 검색, myisam 에서만 지원
예제 :
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 */
UNIQUE KEY `idx_number` (`number`) USING BTREE, /* UNIQUE */
KEY `idx_department` (`department`), /* NORMAL */
KEY `idx_department_name` (`department`,`address`), /* NORMAL (중복키)*/
FULLTEXT KEY `idx_introduction` (`introduction`) /* FULLTEXT */
) 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');
Primary key
ㆍ테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다.
ㆍwhere 문을 이용하여 테이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다.
ㆍ테이블마다 딱 하나의 primary key를 가질 수 있다.
Unique key
ㆍ테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. ( == primary key)
ㆍ고속으로 데이터를 가져올 수 있다. ( primary key 보다 경우에 따라 더 느림 !)
ㆍ여러개의 unique key를 가질 수 있다.
Normal key
ㆍ중복을 허용한다.
ㆍprimary, unique 보다 속도가 느리다.
ㆍ여러개의 key를 지정할 수 있다.
Full Text
ㆍmysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다.
ㆍmysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다. (lucene, sphinx 참고)
ㆍ스토리지 엔진 중 myisam 에서만 사용 가능
ㆍ긴 데이터 안에서 자기가 원하는 데이터를 찾아올 때 빠르게 데이터를 가져올 수 있다.
중복키
ㆍ하나의 키에 여러개의 칼럼을 포함.
ㆍIndex 의 종류가 아니라 Index를 만드는 스타일
인덱스의 정의 방법
ㆍ자주 조회되는 칼럼에 적용
ㆍ조회 시 오랜시간을 소모하는 컬럼에 적용
ㆍ데이터가 긴 경우 인덱스를 사용하지 않는다.
(데이터가 아주 긴 경우, 인덱스의 효과 보다 데이터베이스의 용량을 많이 차지하기 때문에 비용적으로 유리하지 않아 사용하지 않음)
오늘은 INDEX 에 대해 공부했습니닷
다음에는 JOIN 에 대해 공부하겠습니다

'컴터 > Database (MYSQL)' 카테고리의 다른 글
| 6) [Database_MYSQL] JOIN (0) | 2023.06.16 |
|---|---|
| 4) [Database_MYSQL] 그룹핑(group by), 정렬(order) (0) | 2023.06.16 |
| 3) [Database_MYSQL] table 조회 (0) | 2023.06.16 |
| 2) [Database_MYSQL] table 삽입,변경,삭제 (0) | 2023.06.16 |
| 1) [Database_MYSQL] database, table 생성 (0) | 2023.06.16 |