전체 글 265

PUSH_SUBQ ?

SELECT * FROM A, (SELECT * FROM B, C WHERE B.ID = C.ID) E WHERE A.ID = E.ID A가 건수가 작은 상황인데 PLAN 이 잘못 풀려 INLINE VIEW 인 E 내부가 먼저 수행되어 DRIVING TABLE이 되어 지연된다고 하면, SELECT /*+ PUSH_SUBQ */ * FROM A, (SELECT * FROM B, C WHERE B.ID = C.ID) E WHERE A.ID = E.ID 위와 같이 사용하여 바깥의 WHERE 절을 E 안쪽의 조건으로 PUSH 하면 빠른 결과를 얻을 수 있다. 근데 이건 inline view 아닌가? 어찌 subquery 힌트를 먹는거지?

DB 2011.10.03

선행 컬럼의 distnct 값이 많지 않은 경우(특히 일자) 튜닝 방법 한가지

1. 특정 테이블의 date1은 YYYYMMDD 형식의 일자 형태의 문자열 컬럼 (8 byte) table1은 수백만건 index: date1(col1) select distinct date1 from table1 date1에 index가 있더라도 index 전체를 읽어야 하기 때문에 일량이 크다. -> YYYYMMDD 형식을 갖는 임의 테이블을 만들고 원 테이블의 MIN/MAX값을 범위로 지정하고, SEMI JOIN 방식으로 한 건씩 나올때 마다 루프에서 나오도록 튜닝 (temp_date 라는 테이블을 어느정도(table1을 모두 커버 가능한) 범위의 YYYYMMDD 값을 갖는 date2 라는 컬럼을 갖도록 만들고(인덱스 추가) 아래 SQL 처럼 튜닝 가능함) select d.date2 from tem..

DB 2011.09.19

2.5 AOP applicationContext.xml 설정 (no annotation)

1. dao, service 등 업무 bean 작성 2. aop 부분 (명시적인 프록시 생성) .* LogAdvice LogAdvisor 처리 방식은... boardDao bean 을 요청하면 advice 또는 advisor(패턴 일치하는 메서드만)를 target으로 지정한 boardDaoTarget 에 적용하여 proxy 로 만들어내어 실행하게 된다. 아래와 같이 하면, 자동으로 Proxy 생성되도록 설정이 가능하다. (pros and cons?) 3. aop 부분 (자동 프록시 생성) 위와 같이 해주면, advice 및 advior 를 지정할 필요없이, 자동으로 proxy를 생성해준다. 물론 proxy 생성을 위해 bean id 를 바꿔줄 필요도 없다. (명시적으로 프록시 생성하던 방법에서는 Boar..

카테고리 없음 2011.07.28

Producer/Consumer 예제

두 곳의 데이터 소스에서 입력을 받는 동안 사이사이 두 입력값의 동일성을 비교해서 화면에 나타내려고 할 때 사용한 Thread 처리 방식이다. Consumer는 데이터가 없으면 대기하다가, Producer가 데이터를 입력해서 생기면 비교하고 결과를 리턴하는데, 종료 처리는, 두개의 Producer가 생성을 마쳤는지를 검사하다가 interrupt 하게 된다. 쉽게 말해, 두 명의 제빵사가 빵을 만들고 빵 나올때까지 손님이 기다리는 상황인데 빵이 나오면, 손님은 빵을 바로 집고 또 기다린다. 두 명 모두 빵을 다 찍어내면(영업 끝나면) 손님보고 나가라고 interrupt 한다. [Main.java] package pc; public class Main { public static void main(Strin..

Programming/Java 2011.06.20

ListView, TreeView 처리 정리

* 선택항목 얻기 IStructuredSelection sel = (IStructuredSelection)treeViewer.getSelection(); sel.getFirstElement() * deprecated 된 TableTreeViewer를 TreeViewer로 구현하기 tree - treeViewer - treeColumn - treeColumn 과 같이 만들어 두고, ITreeContentProvider, ITableLabelProvider 를 상속받은 Provider들로 설정해주면 된다. 주의할 점은 TreeColumnViewer 를 사용하면 안된다는 것이다!!! 이것은 오직 LabelProvider 를 써서 column 단위의 처리는 하지않아 오류가 나올 것이다.

min/max 쿼리 튜닝시 random access 감소를 위한 목적으로 index_desc + rowid 사용시 주의할 것

INDEX 컬럼 순서에 따라 결과 값이 달라진다. 결과적으로, select * from ( 메인 쿼리(/*+ index_desc */) order by min/max대상) where rownum = 1 과 같이 한번 감싸줘야 의도한 대로 결과값이 나온다. (다소 성능은 감소되지만... index drop 이나 unusable, plan 변경으로 인한 데이터 오류보다 무섭진 않겠지...) 아래는 test script. drop table test5 cascade constraints purge; create table test5 (a number, b number, c number); insert into test5 values (1, 1, 6); insert into test5 values (1, 3, ..

DB 2011.05.25

SWT Subclassing

몇가지 이유로 SWT 에서 Subclassing 이 금지된다고 한다. (has-a 관계로 이용하도록 권장하는 듯 하다) http://www.eclipse.org/swt/faq.php#subclassing RCP 개발중 Main ToolBar(CoolBar)에 콤보박스를 추가할 일이 있었는데, setWidth 나 어떠한 방법을 이용해도 ToolBar에서 크기가 고정되는 것이었다. 호출 구조를 따라가다 보니 Combo 사이즈를 미리 정해주는 법 밖에 방법이 없었다. 아래와 같이 computeSize 및 checkSubclass 를 재정의 해 주었다. protected Control createControl(Composite parent) { combo = new Combo(parent, SWT.READ_ON..