2012-11-21 6 views
1

Java에서 현재 한 번에 한 항목 씩 액세스하는 Oracle 데이터베이스에 큰 데이터 세트가 있습니다. 예를 들어 사용자가 50 개의 항목을 대량으로 가져 오려고하면 각 항목에 대해 저장 프로 시저를 호출하여 순차적으로 처리합니다. 지금은 대량 GET을 구현하기 위해 노력하고 있지만, 방식은 사용자가 다양한 쿼리에 전달할 수 있습니다 인해 어려움을 겪고 :사용자 정의 psuedocolumn 오라클

예 테이블 :

prim_key | identifier | start | end 
----------+--------------+---------+------- 
1   | aaa   | 1  | 3 
2   | aaa   | 3  | 7 
3   | bbb   | 1  | 5 

작동 방법은 경우이다 (id='aaa' and pos=1)과 같은 쿼리를 사용하면 prim_key = 1이 표시되지만 (id='aaa' and pos=2)을 쿼리하면 아무 것도 찾을 수 없습니다. (id='aaa' and pos=-2)을 수행하면 저장된 프로 시저가 -2를 start<=2end>2에 해당하는 범위 스캔으로 변환하기 때문에 prim_key = 1을 다시 찾습니다.

(추가 컨텍스트 :

start from myTable 
where start = (select max(start) from myTable where start <= 2)) 

이 모든 벌금과 작품이며, 시작/끝이 실제로는 날짜와이 질의 메커니즘은 선택 prim_key 같은 일을하고 반대로 효율적 "최신 날짜를 기준으로"쿼리를 할 수 있습니다 단일 가져 오기를 올바르게 수행하지만 지금은 대량 가져 오기를 시도하여 일괄 처리를 상당히 빠르게 할 수 있습니다. 첫 번째 시도는 개별 호출을 다중 스레드하는 것이지만 데이터베이스에 너무 많은 스트레스를 가하여 너무 많은 병렬 처리를 수행합니다 같은 테이블에 대한 쿼리.이 문제를 해결하기 위해 같은 쿼리를 만들려고했습니다.

select prim_key 
from myTable 
where (identifier='aaa' and start=3) 
or (identifier='aaa' and start<=2 and end>2) 

이것은 입력 매개 변수 목록 ('aaa',3 ; 'bbb',-2)에서 구성하는 것으로, 잘 작동하고 예상 한 모든 색인을 사용하여 설명 계획을 작성합니다.

내 문제 : 더 많은 처리를 수행하고 관련 prim_key를 리턴하기 위해 입력 매개 변수가 해당 행을 검색 한 것이 무엇인지 알아야합니다.

select prim_key, PSUEDO 
from myTable 
where (identifier='aaa' and start=3 and PSUEDO='a3') 
or (identifier='aaa' and start<=2 and end>2 and PSUEDO='a-2') 

하지만 where 절에서 값을 반환 할 수있는 방법을 찾을 수 없습니다, 나는 서브 쿼리 수행하여 얻은 색인의 효율성을 잃을 것이라고 생각 : 나는 psuedocolumn 같은 것을 사용할 필요가있는 나 자신을 정의 할 수 있습니다 하나를 선택하십시오.

답변

0

시도 뭔가 같은 :

select 
prim_key, 
case when start = 3 then 'a3' else 'a-2' end pseudo 
from 
you_table 
where 
... 
관련 문제