티스토리 뷰
1. 인덱스 사용이유
2. 인덱스 주의할점
3. 인덱스 예시
인덱스 사용이유
- DB의 경우, 데이터를 저장할 때에 순서없이 저장하는 기능을 한다
- DB는 원하는 결과가 있을시에, Full Scan을 통해서 데이터를 읽어온다
- 인덱스는 Select 조회시, 빠른 결과를 얻기 위해서 사용한다
인덱스 주의할점
- 인덱스는 테이블에서 색인이 필요한 열(column)을 저장하기 위해서 따로 파일로 저장
- 아무리 적은 데이터 양이라도, 인덱스가 쌓이다 보면 DB 저장 공간이 줄어든다
- 빈번하게 데이터값이 수정되고 변경되는 경우, 인덱스 파일 또한 수정되어야하기에 DB성능에 좋지않은 영향을 미친다
- INSERT / UPDATE / DELETE 사용시 주의
- 데이터 중복도가 높은 열(column)의 경우 인덱스의 효용이 없다 (예: 성별, 타입이 별로 없는 경우)
인덱스 예시
- 인덱스의 경우, rowID를 통하여 데이터를 저장하고 조회하게 된다
rowId 란?
데이터베이스 내 데이터 공유의 주소를 일컫음.
총 10Byte의 크기를 가지는 sector로, "오브젝트 번호 + 상대 파일번호+ 블록번호 + 데이터 번호"로
구성되어있다 (데이터베이스 내에 고유한 ID 값)
- 인덱스는 열(column) 단위로 생성된다
- 외래키가 사용되는 열(column)에는 인덱스를 사용하는 것이 좋다
- Join에 자주 사용되는 열(column)에는 인덱스를 생성하는 것이 좋다
Create Table IndexTest (
ID INT NOT NULL,
username VARCHAR(100),
age INT,
address VARCHAR(100),
PRIMARY KEY (ID)
);
Create Table UserDetails (
username VARCHAR(100) NOT NULL,
email VARCHAR(100),
PRIMARY KEY (username)
);
-- IndexTest 외래키 추가
ALTER TABLE IndexTest ADD CONSTRAINT info_username FOREIGN KEY (username) REFERENCES UserDetails(username);
-- Index 추가
CREATE INDEX idx ON IndexTest(username);
-- Index가 적용되어, 조회됨
select IndexTest.ID, IndexTest.age, UserDetails.username, UserDetails.email
from IndexTest
JOIN UserDetails ON IndexTest.username = UserDetails.username
Where IndexTest.username='test';
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL] 집계함수, 스칼라함수 (1) | 2024.10.20 |
---|---|
[SQL] VIEW (0) | 2024.10.20 |
[SQL] 데이터 타입 (0) | 2024.10.18 |
[SQL] DCL (grant, revoke), TCL (0) | 2024.10.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 검증
- 티스토리챌린지
- 포트폴리오
- JSON
- 클래스
- 예외처리
- Spring
- DFS
- 게시판
- 코딩테스트
- bean
- stack
- db
- Java
- 버블정렬
- 오블완
- SQL
- JDBC
- 백준
- 깊이우선탐색
- 이진탐색
- BFS
- Thymeleaf
- 기술면접
- HTML5
- 우선순위 큐
- 타입변환
- 정렬
- 알고리즘
- 게시판 프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함