PLSQL의 3 가지 다른 키에 대한 빠른 액세스를 위해 데이터를 메모리에 캐시하려고합니다. 문제는 포인터가있는 언어에서는 실제로 존재하지 않지만 PLSQL에 대해 내가 알고있는 어떤 것도 없기 때문에 고심하고 있습니다. 나는 아주 큰 루핑 함수를 가지고있어서 아주 세밀한 방법으로 데이터를 갱신하고, 그렇지 않으면 꽤 영원 할 것이기 때문에 이것을해야한다.레코드와 연결된 값을 업데이트하기위한 PLSQL 컬렉션에 대한 가장 빠른 액세스
기본 아이디어는 key_1별로 정렬 된 메모리에 컬렉션이 있다는 것입니다. 레코드 자체의 key_1 값과 컬렉션에서 동일한 key_2를 가지며 수정 한 레코드로 key_3 값을 가진 레코드의 다른 특정 값에 영향을주는 첫 번째 레코드의 값을 변경하려고합니다. 수정 후 나는 시간이 많이 걸리는 쿼리를 사용하는 대신 수정 된 첫 번째 행을 버블 링하여 버틸 수 있습니다.
create type t_num_tbl is table of number;
create type rec_type as object
(
key_1 number,
key_2 varchar2(30),
key_3 t_num_tbl
);
및 컬렉션은 다음과 같이이다 :
그래서 기본적으로 기록은 다음과 같다
create type rec_typetbl is table of rec_type;
v_rectbl rec_typetbl := rec_typetbl();
내가 기록을 수정하면 내가 선택/업데이트를 제공해야 할 것이다 그 관련 레코드를 수정할 수 있도록 다음과 같이 표시됩니다.
SELECT *
FROM table(v_rectbl)t
WHERE t.key_2 = modifiedrec.key_2
AND
(SELECT count(*)
FROM table(t.key_3)
JOIN table(modifiedrec.key_3) USING (column_value)) > 1;
데이터는 메모리에서 인덱싱되지 않으며 액세스가 내 목적에 충분히 빠르지 않습니다.
레코드의 포인터 배열을 컬렉션의 관련 요소에 사용하는 성능과 비교할 수있는 솔루션이 있습니까? key_2, key_3 값은 변경되지 않으므로 연관성은 미리 알 수 있습니다.
아마도 응용 프로그램에는 과도한 것이지만 Oracle [TimesTen In-Memory Database] (http://www.oracle.com/technetwork/database/database-technologies/timesten/overview/index.html)을 확인하십시오. –