컴퓨터과학/SQL

[SQL] order by를 이용한 정렬방식의 과부하와 인덱스를 통한 해결방법

waspy 2021. 3. 2. 18:02

수십, 수백만 개의 데이터를 리스트할 때, order by를 사용하게되면 각각의 데이터를 방문하며 소팅(sorting)하게 되면서 엄청난 성능저하가 일어나게 된다.

이 때 인덱스 칼럼을 지정해서 pk보드로 만들어둔다면 이미 정렬되어있는 인덱스를 통해 성능저하 없이 데이터를 정렬할 수 있게된다.

 

예시

select /*INDEX_DESC(tbl_board pk_board)*/ * from tbl_board where bno > 0

pk_board는 테이블 생성시 제약조건으로 지정한것으로 tbl_board를 pk_board의 내림차순으로 정렬하는 방식으로 tbl_board를 조회하게된다.

여기서 /* */ 내부값은 오라클에서 사용하는 '힌트'로, select문을 처리하는 방법에대해 기술을 하며 이에따라 sql이 실행되게된다.

여기서 힌트는 잘못 작성되더라도 무시되고 별도의 에러가 발생하지는 않는다.

 

FULL 힌트

테이블 전체를 스캔할것을 명시하는 힌트이다.

예: select /*FULL(tbl_board)*/ from tbl_board order by bno desc;

 

INDEX_ASC, INDEX_DESC 힌트

목록 페이지에서 가장 많이 사용하는 힌트로, 주어진 인덱스를 (위에서 pk_board) 순서대로 또는 역순으로 정렬할 수 있다.

예: select /*INDEX_DESC(tbl_board pk_board)*/ * from tbl_board where bno > 0

위와같이 사용하게되면 Order by를 사용하지 않고도 테이블을 내림 또는 오름차순 정렬한채 조회할 수 있다.

 

 

 

 

 

반응형

'컴퓨터과학 > SQL' 카테고리의 다른 글

AWS DB 인스턴스 MySQL 시간설정  (0) 2021.08.03