벨랜튜레이즈 알고리즘

인덱스 구조
blockA + blockL + fileA
8 + 4 + 4

같은 값이면 로우아이디순으로 소팅되어있음

인덱스사용못하는 경우
  • 인덱스를 가공 하는 경우 ( 인덱스는 like, <>, in 등 다 사용할수 있음) 
    •  좌변을 가공하지마라
    • 함수기반 인덱스 가용가능
  • NOT 부정형 조건 사용
    • bitmap index에서는 가능
  • NULL, NOT NULL
  • 옵티마이져가 취사선택
    • 의도적으로 인덱스 사용못하도록 하기
인덱스 머지 방식 실행계획

최근에 만들어진것 -> SQL 파싱할때 뒤에서 부터 파싱

힌트 / suppressing / 옵티마이저




컬럼의 형변환

NLS_DATE_FORMAT = ‘DD-MM-YY’ => ‘yyyyMMdd'



nul = chr ==> num = TO_NUM(chr)

6개컬럼 이상일때
분포도가 10~15% 이내일때
분포도가 이내가 아니여도 절대량이 많으면 클러스트링
손익분기점

인덱스 머지 보다 결합인덱스를 잘 사용하자.

인덱스머지가 불리한경우 . 분포도차이가 클때
인덱스머지가 유리한경우. 분포도차이가 적을때, 부분범위처리


Posted by 빨강토끼
,

개발자의 코드

독서/독서 2014. 4. 28. 15:37



카 와이 청 지음

상동도서관에서 빌림

2014년 4월 19일 ~ 4월 26일


02.은유

코팅을 할 시간을 자주 가져라.

오래된 코드는 주석처리하지말고 버려라.

다양성을 가져라.


03. 동기

특혜는 연봉에 있지 않고 일에 있다. 먼가를 아름답게 만들 수 있는 것에 동기를 부여하라.

시작하고 싶은 곳에서 시작하라.
- 가장 흥미로운 지점부터 바로 시작하라. 맨 처음부터 굳이 써내려 가려고 하지 마라. 나중에 리팩토링을 통해 품질을 개선 할 수 있다.

코드를 작성하기 전 아침에 소프트웨어를 테스트하라, 그 때가 가장 생생할 때이다.

침실 밖에서 일하라.
- 파킨스의 법칙  
"일은 일을 완료하기 위해 주어진 가용한 시간만큼 확장되는 경향이 있다. “

론칭자체는 별로 중요하지 않지만, 론칭날짜가 있는 것은 동기부여에 막강한 효과를 가져다준다.
합리적인 선에서 가능한 한 빨리 소프트웨어를 론칭하라.


04.생산성

마음대로 할 수 있어도, 마감일을 정하라.

훌륭한소프트웨어를 개발하기 원한다면 한도를 정하고 그것을 지켜라.

일정 수립시 세부사항은 잘라내고, 주기적으로 눈에 보이는 결과를 확인 할 수 있는 큰 덩어리로 일정을 잡아라.

매일 두 가지씩 제품을 개선 하라.

To-Do List 를 정리하라.

팀에 ‘일시 활동 중단 시간’을 만들어라.

작고 자율적인 팀에서 일하라.

생산성에서 ‘우리’를 제거하라.


05. 복잡성

코딩하기 어려운 것이 사용하기 어렵다. 단순한 로직을 유지하라.

너무 빠른 리팩토링의 위험하다. 너무 앞서가서 리팩토링을 하지마라.
설계패턴은 애플리케이션이 가까운 미래에 꼭 일어날 것 같은 업무에 필요한 정도로만 구현되어야한다.

예측하라, 하지만 주의 깊에 예측하라. 단지 작은 변화이든 큰 패턴 작업이든, 리팩토링의 결정에 따른 각각의 장단점을 주지하라.


06. 고객
서비스보다는 제품에 대한 비용을 청구하자
개발시간이 두번째 구축할때가 당연히 덜들겠지만 두번째고객에게도 그제품은 동일한가치가 있다. 대신 유연성, 전문성을 더 개선한것으로 정당화할수있고 오히려 더 높은 가격을 요구할 수도 있다


Posted by 빨강토끼
,

현재 Quartz 는 버젼이 2.2.1 까지 릴리즈됐음 (2013년 9월 24일)


JDK 1.6에서 빌드되어서 배포중 이다.


JAVA 1.5 에서 시스템을 운영중이라면 Quartz 1.7.3 이전버젼을 사용해야된다.

http://quartz-scheduler.org/downloads



Posted by 빨강토끼
,

절차형이 아니고 집합적적으로 생각하라.


정적 파티션과 동적파티션

정적파티션이 흔히 말하는 파티셔닝 테이블이다.


Skew 현상
데이터의 대량 삭제시 인덱스구조가 한쪽으로 쏠리는 현상

정기적으로 리빌드해주는것을 추천


블럭체이닝

다이나믹SQL , 스태틱SQL

스태틱SQL은 매번 SQL을 파싱하여 최적화하는 단계를 거침

다이나믹 SQL 은 컬럼등을 변수처리하여 파싱 및 최적화 단계를 건너뜀


Redo log

DB 장애등의 원복시 사용, Rollback 때도 아마 사용


http://www.techonthenet.com/sql/index.php

http://www.techonthenet.com/oracle/index.php

공부해올것


Posted by 빨강토끼
,

DB 솔루션은 개발자가 직접 작업을 컨트롤 하지 못한다.

다만 SQL 이라는 언어를 통하여 DB 솔루션과 대화를 하며 개발자가 원하는 데이터를 요청하고

응답 받을 수 있다.

 

이해를 쉽게 하기 위하여 도서관을 DB 솔루션이라고 가정하고

도서를 대여하기 원하는 우리를 개발자로 가정을 하고 설명을 하겠다.

그리고 이 도서관은 우리가 직접 서고로 찾아가서 책을 찾지 못하고

사서에게 자신이 원하는 책을 말하고 사서가 그 책을 서고에서 찾아서 도서를 대여해 준다.

 

우리는 도서관에 가서 원하는 책을 찾으려고 한다.

우리가 원하는 책을 가장 빨리 사서를 통하여 찾는 방법은 바로

도서관의 각 책에 부여하는 도서 일련번호를 바로 말하는 것이다..

 

도서관은 각 도서들만의 유일한 코드를 가지고 있고

도서일련번호순서대로 도서를 관리하고 있으므로

도서일련번호만 말하면 사서는 바로 그 책을 잦아서 우리에게 대여를 해줄 수 있다.

이것이 쉽게 말하면 오라클의 rowid 로 이해할 수 있다.

 

그 다음으로는 대분류(장르)와 소분류(세부장르)로 구별된 사항과 책의 이름을 말하는 것이다.

물론 출판사나 저자의 이름도 유용하다.

 

장르, 세부장르, 출판사, 저자 들은 인덱스로 이해할 수 있다.

 

책의 색깔이나 페이지수 등은 책의 특징이라고 할 수 있다.

 

그렇다면  PK는 무엇일까?

도서일련번호와는 다르게 도서관에서 분류 및 이해를 쉽게 하기 위하여

역시 각 책마다 유일하게 정의할 수 있도록 도서코드

( 예를 들어 대분류-소분류-출판사-출판사별책순서)를 부여해 놓은 것이라고 할 수 있다.


# 도서코드

 o 대분류

 o 소분류

 o 도서이름

 o 저자

 o 출판사

 o 표지색상

 o 페이지수

 o 출판일

 o 대출횟수


 

그러면 옵티마이저는 무엇일까?

우리가 사서에게 대여를 원하는 책을 말할때

이렇게 말 할 수가 있겠다.

(당연히 책의 일련번호나 도서코드를 모르는 상태에서)

 

"빨간색 책인데요. 패이지수는 250페이지입니다.

도서이름은 인간관계론 입니다.  자기개발서적이구요.

아참! 저자는 데일 카네기입니다."


SELECT * FROM 도서

WHERE 표지색상='빨간색' 

  AND 페이지수=250 

  AND 도서이름='인간관계론'

  AND 소분류='자기개발'

  AND 저자='데일 카네기'


이 말을 듣고 만일 사서가 무식하게 도서관의 모든 책을 하나씩 보면서

  1. 표지색상: 빨간색
  2. 페이지수 : 250 페이지
  3. 도서이름 : 인간관계론
  4. 소분류 : 자기개발
  5. 저자 : 데일 카네기

위와 같은 순서로 책을 찾는다면 우리는 엄청난 시간을 사서가 책을 찾아오기까지 기다려야 될 것이다.

 

하지만 영리한 사서는 아마도 아래와 같은 순서대로 찾을 찾으려고 할것이다.

  1. 소분류 : 자기개발
  2. 저자 : 데일 카네기
  3. 도서이름 : 인간관계론
  4. 표지색상 : 빨간색
  5. 페이지수 : 250 페이지

 

보다 더 경험이 많은 사서는

  1. 소분류 : 자기개발
  2. 표지색상 : 빨간색 (빨간색 책은 몇권 안되므로)
  3. 도서이름 : 인간관계론 (저자보다 책이름이 더 크게 보임)
  4. 저자 : 데일 카네기
  5. 페이지수 :250 페이지

 

첫번째 사서는 교육시간에 배운 매뉴얼대로 찾은 것이고 (룰기반 옵티마이저)

두번째 사서는 오랜 경험으로 나름의 방법을 사용하는 찾는것 이다.(비용기반 옵티마이저)


그렇지만 결국에는 아무리 도서관 사서가 똑똑해도 우리가 도서를 대여할 때 정확하게 내가 찾고자 하는

책을 설명해줘야 된다는 것이다.

 

"그 책이 제목이 인간.. 머였는데 좀 두꺼웠어요. 아마 200 페이지는 넘을 거에요.

빨간색이였던건 기억나요. 저자는 외국인 이였어요."

 

SELECT * FROM BOOK

WHERE 도서이름 LIKE '인간%'

  AND 페이지수 > 200

  AND 표지색상 = 'red'


 

이렇게 말하면 사서도 고생 여러분도 고생이다.

Posted by 빨강토끼
,