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