USE market_db;
SELECT * FROM member;
SHOW INDEX FROM member;
SHOW TABLE STATUS LIKE 'member';
(인덱스 하나도 없는 상태 확인.)
<인덱스 생성>
1) 인덱스 생성
CREATE INDEX idx_member_addr
ON member (addr);
SHOW INDEX FROM member;
SHOW TABLE STATUS LIKE 'member';
인덱스 만들고 다시 실행했는데 인덱스 정보가 안 보임.
---->
ANALYZE TABLE member;
이걸 해야 인덱스가 적용된다.
SHOW TABLE STATUS LIKE 'member';
인덱스 생긴 거 확인 가능.
2) 유니크 인덱스 생성
CREATE UNIQUE INDEX idx_member_mem_name
ON member (mem_name);
유니크 인덱스는 중복값이 없어야 한다.
SHOW INDEX FROM member;INSERT INTO member VALUES('MOO', '마마무', 2, '태국', '001', '12341234', 155, '2020.10.10');ANALYZE TABLE member;멤버 이름이 같은 데이터_ 유니크 인덱스가 있어서 삽입 불가능.
3) 인덱스 사용해서 검색
SELECT mem_id, mem_name, addr
FROM member
WHERE mem_name = '에이핑크';
인덱스 사용해서 검색했음. 인덱스는 where절, 열 이름이 나와야 쓸 수 있음.
4) 인덱스를 사용하려면, WHERE 절에 뒤에 쓰는 열에 아무 가공을 하면 안된다.
CREATE INDEX idx_member_mem_number
ON member (mem_number);
ANALYZE TABLE member;
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 7;
인덱스가 있든 없든 결과는 동일하게 나옴.
execution plan 에 들어가서 결과 나오는 과정을 보면
index range scan --> query block #1 이런 식의 과정이 확인 됨.
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 1;
결과값으로 테이블의 모든 행이 출력됨.
이 경우 execution plan 보면 인덱스 사용하지 않음.
어떤 방식이 더 효과적인지 자동으로 계산을 하는 것.
SELECT mem_name, mem_number
FROM member
WHERE mem_number*2 >= 14;
멤버 수가 7 이상인 거랑 똑같은 결과가 나오지만, 인덱스를 사용하지 않음.
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 14/2;
이렇게 2를 뒤로 넘기면 인덱스 사용한다.
--> WHERE절에 가공을 하지 않으면 더 효율적으로 정보를 불러올 수 있다.
5) 인덱스 제거
DROP INDEX idx_member_mem_name ON member;
DROP INDEX idx_member_addr ON member;
DROP INDEX idx_member_mem_number ON member;
ALTER TABLE member
DROP PRIMARY KEY;
이건 PK, FK로 지금 buy 테이블과 연결되어 있기 때문에 안 지워짐.
SELECT table_name, constraint_name
FROM information_schema.referential_constraints
WHERE constraint_schema = 'market_db' ;
market_db의 외래키 이름 확인하는 구문.
ALTER TABLE buy
DROP FOREIGN KEY buy_ibfk_1;
ALTER TABLE member
DROP PRIMARY KEY;
FK먼저 지우고 다시 mem 테이블의 PK 지우기 --> 잘 지워짐.
'SQL' 카테고리의 다른 글
조건에 맞는 도서 리스트 출력하기 / 재구매가 일어난 상품과 회원 리스트 구하기 (mysql) (0) | 2024.06.29 |
---|---|
SQLD 개념 정리 -1. 데이터 모델링 (0) | 2023.09.06 |
『혼자 공부하는 SQL』16강 복습- 인덱스 내부 작동원리, 데이터 검색 (0) | 2023.07.09 |
『혼자 공부하는 SQL』15강 복습- 클러스터형 인덱스와 보조 인덱스 (0) | 2023.07.08 |
『혼자 공부하는 SQL』14강 복습- 뷰 생성, 수정, 삭제 (0) | 2023.07.08 |