테이블의 필드가
주석/주석항목명/From계정과목/To계정과목/금액/통화키 형태입니다.
테이블 key는 주석/주석항목까지 잡혀있는 상태에서 주어진 조건은 계정과목 1개를 가지고 해당 테이블을 뒤져서 From계정과목과 To계정과목 조건에 걸려있는 해당 주석과 주석항목명을 가져오는 형태입니다.
INDEX를 별도로 From계정과목/To계정과목에 걸어서 생성시켰을 경우 해당 조건으로 데이터 검색시 속도 향상이 있는건지 궁금합니다.(매치코드로 index를 타는건지 range 스캔으로도 가능한지)
댓글 2
-
BeCool~*
2009.04.11 03:29
-
정군
2009.04.13 17:45
차라리 filed 명으로 써주시면 좋았을 텐데... descritption으로 쓰셔서 그런지 눈에 잘 안들어오는 군요.
A/B/from/to
에서 A,B만 있고 from, to에 index가 없다는 뜻으로 이해했습니다.
그런데 value가 from과 to 사이에 있는 A 혹은 B를 찾고 싶다는 뜻이 맞다면..
아래와 같이 추측해 봅니다.
1. 기준 정보 테이블이어서 데이터 많지 않은 경우
-> full table scan 등을 통해서 차라이 internal table에 올려두고 프로그램을 작성하시는게 어떨까 합니다. 그다지 차이 나지 않을 듯 하구요. 실제로 excution plan도 이렇게 풀리지 않을까 싶습니다. 다만, full table scan이 nested loop 등으로 계속 수행되면 성능에 문제가 있을 수 있으니, 메모리로 올려두고 read table로 읽는게 나을 수도 있을 듯 합니다.
2. 데이터가 많은 경우
from이나 to에 index를 걸어두셔도.. 아마 결합인덱스로 from + to가 될테고...
where from <= value
and to >= value
라는 형태가 될테기 때문에 from 조건에 맞는 모든 index를 range scan하고 to 조건에 맞는 것을 찾아서 다시 nested loop으로 range scan 하지 싶습니다. 이 경우.. 그다지 많은 성능의 개선이 있을지는 조금 의문스럽지만... 없는 것 보다는 나아질 것으로 생각됩니다.
하지만 index를 이 테이블에 준다고 해서 모든 성능이 좋아지는 것은 아닙니다. 이 테이블은 성능이 좋아지지만, 다른 프로그램에서 사용할 때 문제가 생길수도 있기 때문에 index 를 생성할 때는 해당 table을 사용하는 전체 프로그램에 대해서 성능 검증이 뒤따라야 합니다.
따라서, SQL 고수분들의 다양한 아이디어가 많은 것으로 압니다만.. 얼마전에 들었던 수업 - 농때이를 좀 쳐서;;;- 에서 얼핏 기억나기로는 보통 계정과목의 경우 naming이 일정하기 때문에 이를 이용하는 것 같습니다.
즉 54123333 이면
54120000에서 54129999 사이의 계정으로 정의될 가능성이 높기 때문에 5412 만으로 비교 검색을 해서 from 계정을 찾는게 나을 수도 있을 듯 합니다. 관련된 쿼리들은 인터넷 뒤지면 많을 수도 있으니 그것을 참조하는게 좋겠습니다.
From 이나 To 중에 하나만 index 잡아도..
쿼리시 해당 필드를 where 조건에 넣으면 퍼포먼스 향상이 있겠네요..
근데 해당 테이블의 데이터가 많은가요?