Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- TABLE
- concurrentsessionfilter
- form login
- 임베디드 타입
- Remember-me
- 객제지향 쿼리 언어
- MySQL
- field column mapping
- 세션 생성 정책
- spring jpa
- SessionManagementFilter
- 기본값 타입
- 상속관계 매핑
- JPQL
- ddl-auto
- Database
- 양방향 매핑
- 값 타입 컬렉션
- 기본 키 매핑
- 다대다
- AnonymousAuthenticationFilter
- 세션 고정 보호
- orphanRemovel
- Spring Security
- jpa
- 동시 세션 제어
- @MappedSuperclasss
- 값 타입 비교
- 지연 로딩
- 즉시 로딩
Archives
- Today
- Total
hoondev
[MYSQL] INDEX 본문
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`),
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');
위와 같이 테이블을 생성해주자.
primary key
- 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다.
- where 문을 이용해서 데이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다.
- 테이블마다 딱 하나의 primary key를 가질 수 있다.
select * from student where id=3;
unique key
- 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. (== primary key)
- 고속으로 데이터를 가져올 수 있다.
- 여러개의 unique key를 지정할 수 있다.
select * from student where number=0534543;
normal key
- 중복을 허용한다.
- primary, unique 보다 속도가 느리다.
- 여러개의 키를 지정할 수 있다.
select * from student where department='국문과'
Full Text
- mysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다.
- mysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다.
전문검색엔진으로 lucene, sphinx 참고 - 스토리지 엔진 중 myisam에서만 사용가능
SELECT introduction, MATCH(introduction) AGAINST('영문과에') FROM student WHERE MATCH (introduction) AGAINST('영문과에');
중복키
- 하나의 키에 여러개의 칼럼을 포함
select * from student where department='국문과' AND address='제주';
인덱스의 정의 방법
- 자주 조회되는 칼럼에 적용
- 조회 시 오랜시간을 소모하는 컬럼에 적용
- 데이터가 긴 경우 인덱스를 사용하지 않는다.
Reference
'Database' 카테고리의 다른 글
[MYSQL] ORDER (0) | 2023.03.01 |
---|---|
[MYSQL] SELECT (0) | 2023.02.24 |
[MYSQL] UPDATE (0) | 2023.02.22 |
[MYSQL] INSERT (0) | 2023.02.21 |
[DATABASE] TABLE이란 (0) | 2023.02.20 |
Comments