위 테이블과 같은 구조에 인덱스를 생성하는 예제 입니다.
1. 인덱스 추가로 생성
CREATE INDEX <인덱스명> ON <테이블명> ( 칼럼명1, 칼럼명2, ... );
(예제)
CREATE INDEX idx_test ON books ( writer );
2. 테이블 생성시 인덱스 생성
INDEX <인덱스명> ( 칼럼명1, 칼럼명2 )
UNIQUE INDEX <인덱스명> ( 칼럼명 ) --> 항상 유일해야 함.
(예제)
CREATE TABLE `books` (
`id` varchar(5) NOT NULL,
`name` varchar(20) NOT NULL,
`writer` varchar(20) NOT NULL,
`price` decimal(10,2) DEFAULT '0.00',
`genre` varchar(20) NOT NULL,
`publisher` varchar(20) NOT NULL,
`discount_yn` char(1) NOT NULL,
`discount_rate` decimal(10,0) DEFAULT '0',
`cnt` decimal(10,0) DEFAULT '0',
`sale_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_test` (`writer`)
);
3. 테이블에 추가
ALTER TABLE <테이블명> ADD INDEX <인덱스명> ( 칼럼명1, 칼럼명2, ... );
(예제)
ALTER TABLE books ADD INDEX idx_test ( writer );
4. 인덱스 보기
SHOW INDEX FROM <테이블명>;
(예제)
SHOW INDEX FROM books;
5. 인덱스 삭제
ALTER TABLE <테이블명> DROP INDEX <인덱스명>;
(예제)
ALTER TABLE books DROP INDEX idx_test;
6. index hint 쿼리사용하기
use index(인덱스명)
ignore index(인덱스명)
force index(인덱스명)
use index for order by (인덱스명)
use index for group by (인덱스명)
select * from [테이블명] use index(인덱스명) where ... order by ...
예를 들어보면 다음과 같이 사용하실 수 있습니다.
> SELECT * FROM 테이블명 IGNORE INDEX (인덱스명1, 인덱스명2) WHERE 조건절;
> SELECT * FROM 테이블명 USE INDEX FOR ORDER BY (인덱스명3);
데이터 약 960만개 넣고 INDEX 넣고 시간 차이를 확인했습니다.
대용량 데이터 넣는 방법 https://backnote.tistory.com/111
'DB > mysql' 카테고리의 다른 글
파티셔닝(Partitioning) 추가 및 수정(예시포함) (0) | 2023.03.24 |
---|---|
파티셔닝(Partitioning)이란? (0) | 2023.03.20 |
프로시저(mysql대용량 insert) (0) | 2023.03.14 |
foreach 사용 예시 (0) | 2023.01.26 |
master slave 연동 확인하기 (0) | 2022.11.01 |