프롤로그
데이터 베이스 안에 테이블만 표현하고 저번 글
2024.01.17 - [데이터베이스] - [데이터베이스] 데이터베이스 구축 절차 #3
에서도 테이블 생성하고 데이터를 넣는 과정을 배웠다. 이게 기본적이고 중요하긴 하지만 테이블만 가지고 실무에서 데이터베이스를 운영하지 않는다.
다른 데이터베이스 개체로는 인덱스, 스토어드 프로시저, 트리거, 함수, 트리거 커서 등이 있지만 이번엔 인덱스만 알아보자.
인덱스
실무에서 사용되는 많게는 수천만 ~ 수억 건 이상의 데이터에서 인덱스 없이 전체 데이터를 찾아본다는 것은 되게 오래 걸릴 일이기에 인덱스로 찾아보기(색인) 을 활용한다.
인덱스는 테이블의 열 단위에 생성된다. 열을 기본키로 생성하면 자동으로 인덱스가 생성된다.
인덱스를 간단히 사용해보자
shopdb를 더블클릭한 상태에서 아래와 같은 코드를 쿼리에다가 입력한다.
CREATE TABLE indexTBL (first_name varchar(14), last_name varchar(16), hire_date date);
INSERT INTO indexTBL
select first_name, last_name, hire_date
FROM employees.employees
LIMIT 500;
SELECT * FROM indexTBL;
indexTBL 이라는 fitst_name, last_name, hire_date 의 열 이름을 가진 테이블을 생성해주고, emplyees.employees 에서 500개를 전부 데이터를 넣어주고, indexTBL을 가져와주는 것이다.
refresh all 을 하면 indextbl 이 잘 생성되었다.
인덱스가 없는 상태에서 쿼리 작동 확인
SELECT * FROM indexTBL WHERE first_name = "Mary";
위 쿼리를 입력하고 결과를 봐보자.
하나의 테이블이 나왔는데, 여기서 오른쪽에 아래 화살표를 누르고
Execution Plan (실행계획)을 확인하면, Full Table Scan (전체 테이블 스캔)이라는 단어가 나온다.
이 뜻은 인덱스를 사용하지 않고 테이블 전체를 검색했다는 뜻이다.대량의 데이터가 들어있었다면 모든 테이블을 검색하기에 많은 시간 및 시스템 과부하를 초래했을 것이다.
테이블에 인덱스 생성
SQL을 실행해서 테이블(indexTBL)의 이름(first_name) 열에 인덱스를 생성해보자
CREATE INDEX idx_indexTBL_firstname ON indexTBL(first_name);
이러면 성공한거다.
그리고
SELECT * FROM indexTBL WHERE first_name = "Mary";
를 입력해서 확인해보자.
Non-Unique Key Lookup(인덱스를 사용함) 이라고 뜬다. 인덱스를 사용해서 결과를 찾아냈다는 의미이고 밑에 idx_indexTBL_firstname 이 나타난다.
위와 같이 필요한 열에는 꼭 인덱스를 생성해 줘야한다. 나중에 다시 배운다고 한다.
정리를 하자면
CREATE INDEX: 새로운 인덱스를 생성하라는 명령. 인덱스는 데이터베이스 내의 데이터 검색 속도를 향상시키기 위해 사용
idx_indexTBL_firstname: 생성될 인덱스의 이름. 이 경우, 인덱스의 이름은 idx_indexTBL_firstname으로 지정. 인덱스 이름은 일반적으로 인덱스의 목적이나 포함된 테이블 및 열의 이름을 반영.
ON indexTBL(first_name): 이 인덱스가 적용될 테이블과 열을 지정. 여기서 indexTBL은 테이블 이름이고, first_name은 해당 테이블 내의 열(column) 이름. 즉, 이 인덱스는 indexTBL 테이블의 first_name 열에 대해 생성.
에필로그
이해가 안 되지만...나중에 다시 나온다니까;;
'데이터베이스' 카테고리의 다른 글
[데이터베이스] 데이터베이스 개체의 활용 - 스토어드 프로시저 #6 (0) | 2024.01.20 |
---|---|
[데이터베이스] 데이터베이스 개체의 활용 - 뷰 #5 (0) | 2024.01.20 |
[데이터베이스] 데이터베이스 구축 절차 #3 (1) | 2024.01.17 |
[데이터베이스] MySQL 설치하기 #2 (2) | 2024.01.11 |
[데이터베이스] DBMS 개요 #1 (1) | 2024.01.10 |