employee테이블이 있다고 할 때
emp_seq
emp_name
emp_id
emp_sex
emp_entering_date
이런 식으로 컬럼이 있다고 할 때요.
emp_entering_date 이 컬럼은 입사일이며, 날짜형식으로 저장이 되어있고, 2014년 3월~2014년 7월 입사한 사원을 구하라!
라고 했을 때
convert(varchar(10),emp_entering_date,126) >= '2014-03-01' and convert(varchar(10),emp_entering_date,126) <= '2014-07-31'
이러한 방식으로 검색조건을 줬습니다.
헌데, 현재 제가 근무하는 회사에서 자주 쓰는 테이블에 컬럼수는 5백만가량의 데이터가 있고
위와 같이 할 때 특정회원들(데이터 많은 회원)은 속도가 상당히 느려지기 때문에 좀 알아 본 결과
convert emp_entering_date between convert(datetime, '2014-03-01 00:00:00.000') and convert(datetime, '2014-07-31 00:00:00.000')
emp_entering_date
가 조건으로...
또 어떤 페이지는
emp_sex
emp_entering_date
가 조건으로...
그래서 각 페이지들에 쓰이는 검색조건들의 컬럼을 전부 인덱스로 생성하려보니
10개가 넘어가네요;;;
인덱스는 검색조건에 해당되는 컬럼들로 생성해야 성능이 좋아지는것으로 알고있는데,
이러한 경우에는 어떤식으로 속도향상을 기대할 수 있을까요?
Comment 1
-
초짜해커
2014.09.26 16:26
음...일단 맨 위에꺼만 답변을 드리면
날짜 컬럼을 Convert한다음 조건을 주면 인덱스를 사용하지 못합니다.
쉽게 예를 들면
SQL 관련 책의 맨 뒤에 인덱스를 이용해서 "클러스터드 인덱스"라는 페이지를 찾으세요 그러면 빨리 찾겠지만
키워드 중에 중간에 "클러스터드"라는 말이 들어가는 페이지를 찾으세요!! 라고 하면 어떻게 될까요?
인덱스를 처음부터 끝까지 눈으로 훑으면서 "클러스터드"를 찾아야 합니다. 이건 인덱스 스켄이죠.