'개발'에 해당되는 글 2건

  1. 2010.10.08 결합 인덱스 (Composite Index) - 오라클
  2. 2009.09.01 ibatis 페이징 - dynamic
출처 : http://www.gurubee.net/pages/viewpage.action?pageId=2458051

1. 결합인덱스의 장점
  • 좋은 분포도 : 나쁜 분포도를 가진 column을 결합한 결합 인덱스가 더 좋은 분포도를 가질 수 있다.
  • 저장 공간의 효율성 : 한 질의에 의해 선택된 모든 칼럼이 결합인덱스에 있을 경우, table을 access하지 않고 결합 인덱스 만으로 원하는 값을 가져올 수 있다. 그러나 그만큼의 디스크나 메모리에 부하가 많이 걸릴 것이다.

    [예] select empno from emp where empno='123';  

    이 경우는 특별히 테이블을 access하지 않고 index만으로 해당값을 출력할수 있다. 따라서 검색속도가 비약적으로 빨라지는 효과를 볼 수 있습니다.  

2. 결합 인덱스의 column선택을 위한 지침
  • 각 column의 분포도 보다 결합 인덱스에서 결합된 분포도가 더 좋을 경우
  • 여러 질의에서 하나이상의 칼럼값을 가진 칼럼의 동일한 집합을 질의할 경우, 이들 모든 칼럼을 포함하는 결합 인덱스 생성을 고려한다.

3. 결합 인덱스 구성시 column순서 배치를 위한 지침  
  • WHERE절에 사용된 칼럼을 선행부분으로 만들기 위한 결합 인덱스를 생성
  • 칼럼의 일부가 WHERE절에서 자주 사용될 경우 =>자주 select되는 column을 선행부분올 만들어서 이 column만으로 인덱스를 사용할 수 있도록 한다.
  • 모든 칼럼이 WHERE절에서 동일하게 사용되면 =>질의 성능을 개선하기 위하여 CREATE INDEX statement에서 분포도가 좋은 순서대로 배열
  • 모든 칼럼이 WHERE절에서 동일하게 자주 사용되지만 데이터가 한 column에 대해 물리적으로 정렬되어 있으면 =>그 column을 결합 인덱스의 첫번째로 구성
  • ‘=’을 사용할 땐 선택범위가 좁은 것을 앞에 놓는다.

4. in을 이용한 access효율 향상. (in은 ‘=’의 의미를 가지고 있다.)

예) select * from tab1 where col1='a' and col2 between '111' and '112';
→select * from tab1 where col1='a' and col2 in('111', '112');

여기서 col2의 값이 적을수록 후자의 속도가 빨라진다. 물론 보통의 경우에도 후자가 빠르다.
일반적으로 between, like문이 들어가는 SQL문은 in문으로 대체해 준다.
 
5. 일부컬럼만 사용할 경우

만약 index가 (a+b+c)로 이루어져 있을 경우 where조건에서 a, a+b, a+c, a+b+c가 나오면 index적용이 가능 하지만, b, b+c가 나오면 index적용이 불가능하다. -> B*Tree에서 검색이 불가능 하기 때문에.. 따라서 결합인덱스의 첫 번째 컬럼이 꼭 나와야 index를 적용할 수가 있다. 아울러 대개의 결합인덱스는 최고 5개까지가 적당함. 그럼 간략히 정리를 해보겠습니다.


**
IN을 고려한 결합 인덱스의 선정

인덱스의 선정

인덱스 선정절차

대용량 INDEX 처리에 관한 SQL

Posted by ukmie
,
http://zxcasd.pe.kr/tt/108

sqlMap
  <select id="selectByMapForPaging" parameterClass="map" resultMap="abatorgenerated_FilteringBoardResult">
select 머머 from filtering_board 

   <!-- where -->
  <dynamic prepend="WHERE">
      <isNotNull prepend="and" property="adminUid">
       admin_uid = #adminUid#       
      </isNotNull>
      <isNotNull prepend="and" property="displayName">
       display_name like '%$displayName$%'
      </isNotNull>
      <isNotNull prepend="and" property="viewUrl">
          view_url like '%$viewUrl$%'
      </isNotNull>      
  </dynamic>

  order by $sort$ $sortasc$ offset #startNum# limit #pageSize#
  </select>

여기서는 map에 조건을 넘겼다. bean에 startNum과 pageSize를 추가하고, bean을 조건으로 이용하는 것도 편하다.

이런식으로 하면, 페이징이 가능해진다. 하지만 데이터베이스에 종속적으로 되기 때문에 추천하지 않는다고 한다.

Posted by ukmie
,