내 응용 프로그램을 사용하면 사용자가 실험의 일부로 측정 데이터를 수집 할 수 있으며 이전에 수행 된 모든 측정에 대해보고 할 수 있어야합니다. (18) 사용자가 각각 2,000 실험, 거기에 내 데이터베이스에서오라클 11g - 수백만 행의 분석 기능 수행
CREATE TABLE EXPERIMENTS(
EXPT_ID INT,
EXPT_NAME VARCHAR2(255 CHAR)
);
CREATE TABLE USERS(
USER_ID INT,
EXPT_ID INT
);
CREATE TABLE SAMPLES(
SAMPLE_ID INT,
USER_ID INT
);
CREATE TABLE MEASUREMENTS(
MEASUREMENT_ID INT,
SAMPLE_ID INT,
MEASUREMENT_PARAMETER_1 NUMBER,
MEASUREMENT_PARAMETER_2 NUMBER
);
:
다음은 아주 간단 내가 가지고있는 테이블의 버전입니다. 각 사용자는 측정 할 6 개의 샘플을 가지고 있으며 샘플 당 100 개의 측정을 수행합니다.
즉, 현재 데이터베이스에 저장되어있는 측정 값은 2000 * 18 * 6 * 100 = 21600000입니다.
각 사용자에 대해 측정 매개 변수 1과 2의 AVG()를 얻는 쿼리를 작성하려고합니다. 이는 약 36,000 개의 행을 반환합니다.
내가 사용하는 쿼리는 매우 느립니다. 30 분 이상 실행 한 상태로 돌아 왔지만 아무 것도 반환하지 않습니다. 내 질문은 : 평균을 얻는 효율적인 방법이 있습니까? 합리적인 시간 (예 : 2 분)에이 양의 데이터에 대한 결과를 실제로 얻을 수 있습니까? 아니면 내가 비현실적입니까?
SELECT
E.EXPT_ID,
U.USER_ID,
AVG(MEASUREMENT_PARAMETER_1) AS AVG_1,
AVG(MEASUREMENT_PARAMETER_2) AS AVG_2
FROM
EXPERIMENTS E,
USERS U,
SAMPLES S,
MEASUREMENTS M
WHERE
U.EXPT_ID = E.EXPT_ID
AND S.USER_ID = U.USER_ID
AND M.SAMPLE_ID = S.SAMPLE_ID
GROUP BY E.EXPT_ID, U.USER_ID
이 각 expt_id/USER_ID 조합 2 개 측정 매개 변수의 평균에 대한 행을 반환합니다
여기에 (다시 단순화 된 버전) 내가 가지고있는 쿼리입니다.
이것은 분석 함수가 아닌 집계이며, (분석 함수처럼) 수백만 행에서 제대로 작동해야합니다. 즉각적인 혐의로 어떤 DDL도 게시하지 않았기 때문에 아무 것도 없다는 것입니다 ... 당신과 그 사람들은 무엇입니까? – Ben