MySQL - 6.3 인덱스 - 인덱스의 실제 사용

govlKH·2023년 7월 1일
0

SQL

목록 보기
12/17

6.3 인덱스 - 인덱스의 실제 사용

인덱스 생성 및 제거

  • 인덱스 생성 (대괄호는 생략 가능)
CREATE [UNIQUE] INDEX 인덱스_이름
	on 테이블_이름 (열_이름) [ASC | DISC]   # ASC만 주로 쓰인다
    
    
* UNIQUE 주의 : UNIQUE를 사용하면, 그 열에는 중복이 허용되지 않는다는 것이다.
ex) 주민등록번호 : 중복 x, 이메일 : 가능 
	+  현재 중복 없다고 해서 UNIQEU로 무작정 만들면 X : 이름 같은 경우 겹치는 것
	   없다고UNIQUE로 만들었다가 차후 같은 이름 회원가입할 때 문제가 생길 수 있다.
       

ANALYZE TABLE member;  -- 지금까지 만든 인덱스를 모두 적용

이를 통해 적용을 시키고, SHOW INDEX FROM member로 확인한다.

  • 인덱스 제거
DROP INDEX 인덱스_이름 ON 테이블_이름

DROP INDEX idx_member_mem_name ON member;
DROP INDEX idx_member_addr ON member;
DROP INDEX idx_member_mem_number ON member;
  • 인덱스 사용
SELECT * FROM member; -- 전부 조회하기에 인덱스 쓰지 않음 

인덱스를 사용하기 위해서는 WHERE 절을 사용해야 한다!!!
SELECT mem_id, mem_name, addr 
    FROM member 
    WHERE mem_name = '여자친구';

오잉 얘는 Full Table Scan을 하네?!?!
인덱스를 사용해서 검색하려면, WHERE절에 어떠한 가공도 해서는 안 된다!!
SELECT mem_name, mem_number 
    FROM member 
    WHERE mem_number*2 >= 14;

따라서 이런 방식으로 바꿔줘야 한다!!
SELECT mem_name, mem_number 
    FROM member 
    WHERE mem_number >= 14/2;

  • 자동으로 생성된 인덱스 : PRIMARY, UNIQUE
    DROP INDEX로 제거하지 못 한다.
- 프라이머리 키 제거!
ALTER TABLE member 
    DROP PRIMARY KEY;
-> 만약 연결되어 있는 테이블이 존재하여, 지워지지 않는다면?
	: 외래키를 먼저 제거하고 이후에 프라이머리 키를 제거한다!

아래와 같은 방식으로 우선 이름을 찾고 (constraint_name에 해당하는)
이에 맞는 외래키를 제거한다!

SELECT table_name, constraint_name
    FROM information_schema.referential_constraints
    WHERE constraint_schema = 'market_db';

 - 외래키 제거 
ALTER TABLE buy 
    DROP FOREIGN KEY buy_ibfk_1;
    
 - 기본 키(PRIMARY KEY) 제거
ALTER TABLE member 
    DROP PRIMARY KEY;
profile
수학과 대학원생. 한 걸음씩 꾸준히

0개의 댓글