1. 인덱스
대부분의 책을 보면 맨 앞에 목차( index )라는 것이 있습니다.
몇 페이지에서 무슨 내용을 다룬다는 내용을 간략하게 표시해 놓은 것이죠.
이와 같은 개념이 DB에도 있습니다.
테이블에 여러 데이터들이 무작위로 섞여 있으면 조회 하는데 시간이 오래걸립니다.
이 때 검색 알고리즘( B+트리, 해시 등의 방법 )을 사용하는 인덱스를 이용하면 검색 속도를 향상시킬 수 있습니다.
첵의 목차를 보고 특정 내용을 빨리 찾아갈 수 있는 것처럼요.
인덱스와 관련된 이론적인 내용은 여기를 참고해주세요.
이제 MySQL에서 인덱스를 다뤄보도록 하겟습니다.
1) 인덱스 테이블 생성
인덱스 테이블을 생성하는 명령어의 기본 구조는 CREATE INDEX 인덱스테이블명 ON 테이블(컬럼); 입니다.
아래는 products_index 인덱스 테이블을 생성하는데, 이 인덱스 테이블은 products 테이블의 no 컬럼을 기반으로하는 예제입니다.
# CREATE INDEX products_index ON products(no);
- products 테이블의 no 컬럼을 기준으로 인덱스 테이블을 생성했으니, products 테이블을 조회할 때 no 컬럼을 기준으로 검색해야 성능 상승을 기대해볼 수 있습니다. ( 그것이 인덱스 테이블을 생성한 목적이니까요. )
2) 인덱스 테이블 조회
인덱스 테이블을 조회하는 명령어의 기본 구조는 SHOW INDEXES FROM 테이블; 입니다.
아래는 products 테이블의 인덱스를 조회하는 예제입니다.
# SHOW INDEXES from products
3) 인덱스 테이블 삭제
인덱스 테이블을 삭제하는 명령어의 기본 구조는 DROP INDEX 인덱스테이블명 ON 테이블; 입니다.
아래는 product_index 인덱스 테이블을 삭제하는 예제입니다.
# DROP INDEX products_index ON products;
- 일반 테이블을 삭제하는 명령어인 DROP TABLE 명령어를 실행하면, 그 테이블과 관련된 index table도 같이 삭제됩니다.
2. 뷰 ( View )
데이터를 조회하는 SELECT 쿼리의 결과는 객체가 아닙니다.
단지 명령의 결과일 뿐, 일회성으로 끝납니다.
뷰는 SELECT의 결과를 객체로 만드는 기법입니다.
즉, SELECT의 결과를 테이블로 만들어서 테이블처럼 사용할 수 있는데, 이를 뷰 테이블이라 합니다.
뷰와 관련된 이론적인 내용은 여기를 참고해주세요.
뷰 테이블은 실제로 존재하는 테이블이 아닌 가상의 테이블입니다.
그래서 뷰는 저장공간이 없기 때문에 뷰 테이블의 데이터를 삽입, 수정, 삭제를 하려면 조건으로 PK 컬럼를 반드시 지정해야 한다는 조건이 있습니다.
일반적으로 뷰는 SELECT 쿼리를 위해 사용하지만요.
인덱스 테이블을 다뤘던 것처럼, 뷰 테이블을 다루는 방법도 간단하게 알아보겠습니다.
1) 뷰 테이블 생성
뷰 테이블을 생성하는 명령어의 기본 구조는 CREATE VIEW 뷰테이블명 AS (서브쿼리) 입니다.
아래는 서브쿼리의 결과를 데이터로 갖는 products_view 뷰 테이블을 생성하는 예제입니다.
# CREATE VIEW products_view AS (SELECT no, name, model_number FROM product);
- product에 많은 컬럼이 있더라도 특정 컬럼들만 노출하므로 은닉화가 가능합니다.
- 뷰는 SELECT 명령을 가상의 테이블로 만들어서 테이블처럼 사용할 수 있기 때문에 편리합니다. ( 객체의 재사용성 )
- 그러나, 뷰 테이블에서 컬럼의 자료형, 제약조건들을 새롭게 지정할 수는 없습니다.
일반 테이블에서 SELECT 쿼리를 수행하는 것처럼 가상 테이블 products_view에서도 SELECT 명령을 실행할 수 있습니다.
즉, 일반 테이블 처럼 SELECT 조회를 할 수 있습니다.
# SELECT * FROM products_view WHERE no=1;
2) 뷰 삭제
뷰 테이블을 삭제하는 명령어의 기본 구조는 DROP VIEW 뷰테이블명 입니다.
아래는 products_view 뷰 테이블을 삭제하는 예제입니다.
# DROP VIEW products_view;
이상으로 인덱스, 뷰 테이블을 다루는 방법에 대해 알아보았습니다.
'Database > MySQL' 카테고리의 다른 글
[MySQL] MySQL의 password() 함수와 암호화 (2) | 2018.03.11 |
---|---|
[MySQL] SYSDATE()와 NOW()의 차이 (0) | 2018.03.11 |
[MySQL] 조인( JOIN ) (0) | 2018.03.11 |
[MySQL] 서브쿼리 ( subquery ) (1) | 2018.03.11 |
[MySQL] GROUP BY , HAVING (0) | 2018.03.11 |
[MySQL] Alias, 함수, 집합연산 (0) | 2018.03.11 |
[MySQL] DDL, DML 기본 명령어 (2) | 2018.03.11 |