Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

물론 실행계획까지 개발툴에 통합되어 포함되었으면 하는 바램도 있습니다. 




실행계획 조사하기

실행계획의 출력포맺은 DB마다 다르지만 공통적인 3가지요소가 있습니다.

  • 조작대상 객체:
  • 객체에 대한 조작의 종류
  • 조작 대상이 되는 레코드 수:


순차 풀스캔 VS 인덱스 스캔

엔티티의 설계

Code Block
languagejava
themeEmacs
@Entity
public class User {
	private String name;

	@ManyToOne
	@JoinColumn(name = "GROUP_ID")
    private GroupInfo groupInfo;
}
ManyToOne은 JPA에서 관계도 형성을 하는 어노테이션으로서 실제 데이터베이스에서는
아래와같이 테이블생성시 외래키 설정및 인덱스 설정이 자동으로 수행되게 됩니다.
KEY `FKa36i4ekojwk70bxen390i6tek` (`group_id`) USING BTREE,
CONSTRAINT `FKa36i4ekojwk70bxen390i6tek` FOREIGN KEY (`group_id`) REFERENCES `group_info` (`group_id`)

순차풀스캔

JPASQL
findByName("Minsu")SELECT * FROM user where name = 'minsu2';

Name필드에는 아무런 인덱스가 없기때문에, minsu2를 찾기위해 순차적으로

끝까지 조회를 해야합니다. (중복 사용자포함)

데이터량이 많아질시 탐색시간이 같이 선형적으로 증가합니다.


인덱스 스캔

JPASQL
findByGroupId(1)SELECT * FROM user where group_id = 2;

인덱스가 설정된 필드는, 이미 특정 탐색 알고리즘을 위해 데이터 분류가 되어 있습니다.

이경우 모두 순차 비교검사 할필요는 없이, 탐색 회수를 줄일수 있습니다.

적은량의 데이터에서 탐색시 효과가 없을수 있으나, 

데이터량이 늘어남에따라 효과를볼수가 있습니다.


스캔 범위/방식에따른 실행계획 전략

성능을 위한 스캔 전략은 3가지정도로 요약할수 있습니다.

...