CREATE [UNIQUE] INDEX 인덱스_이름
ON 테이블_이름 (열_이름) [ASC|DESC]
기본: ASC
UNIQUE 쓸 때는 중복이 안된다는 것을 잘 기억해야함
-> 이름은 중복일 수도 있으니 안됨
DELETE INDEX 인덱스_이름 ON 테이블_이름
=> 생성&제거는 추가로 만든 것

Data_length: 16384 = 16kb
=> 한페이지 크기(적은 양이 아님!)

보조 인덱스가 없기때문에 Index_length = 0

보조인덱스 생성

CREATE UNIQUE INDEX idx_member_mem_number
ON member (mem_number); -- 오류 발생
오류 원인: 멤버 숫자는 중복이 될 수밖에 없음(현재 데이터에 중복된 값이 들어가있음)
UNIQUE키를 만들 때, 데이터가 중복되는 경우 만들면 안됨
-> 만들고 싶으면 UNIQUE를 빼고!
인덱스 만드는 것도 중요하지만...잘 사용하는 것이 더더더욱 중요!!

현재 인덱스 생성된 열은 'mem_id', 'mem_name', 'addr'
SELECT * FROM member;
=> 인덱스 사용 안함, 전체 테이블 다 찾아본거
SELECT mem_id, mem_name, addr FROM member;
=> 이 상황에서도 인덱스는 사용 안됨 SELECT절에 나오는 것은 인덱스 사용 여부와 관계 없음
그렇다면 인덱스는 언제 사용되는가??
WHERE 절에 조건식으로 나올 때
SELECT mem_id, mem_name, addr
FROM member
WHERE mem_name = '에이핑크';

-> fulltable 조회가 아님
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 7;
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 1;
위에는 인덱스 사용해서 데이터 조회하지만, 밑에는 full table 조회
=> 모든 데이터의 mem_number가 1이 넘기 때문에, 굳이 index를 사용할 필요가 없다고 판단
SELECT mem_name, mem_number
FROM member
WHERE mem_number*2 >= 14;
SELECT mem_name, mem_number
FROM member
WHERE mem_number >= 14/2;
이 두 상황에서는??
위에는 full table scan, 아래는 index
=> ????
index를 사용하기 위해서는, WHERE절에서 해당 index에 아무런 가공도 들어가면 안됨
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;
DROP으로 보조 인덱스 삭제 가능,
PK없애는 것으로 클러스터형 삭제 가능
-> but! 현재 member 테이블의 PK는 buy 테이블과 PK, FK로 연결이 되어있는 상태 -> 삭제 안됨
=> 먼저 제거해주고(연결 끊고) 삭제 해야함