아래 명령으로 만들 수있는 두 개의 테이블 (클러스터되지 않은 인덱스와 함께)이 있습니다.
CREATE TABLE GroupTable
(
GroupKey int NOT NULL PRIMARY KEY,
RecordCount int NOT NULL,
GroupScore float NOT NULL
);
CREATE TABLE RecordTable
(
RecordKey varchar(10) NOT NULL,
GroupKey int NOT NULL,
PRIMARY KEY(RecordKey, GroupKey)
);
CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey);
기술적으로 내 테이블은 약간 다르고 몇 가지 다른 테이블에 참여하고 있지만 상황에 맞는 프록시입니다.
GroupKeys
다른 하위 집합이 아닌 모든 항목을 선택하고 싶습니다GroupKey
.- 주어진 수퍼 세트
GroupScore
에 대해 모든 하위 세트 (자체 포함) 의 최대 값을 가져오고 싶습니다 . - a
GroupKey
에RecordKeys
다른 것과 정확히 같은 것이 들어GroupKey(s)
있으면 그중 하나만GroupKeys
잡습니다 (어떤 것이 중요하지는 않습니다). - 모든
GroupKey
똑같은 가지고 그RecordKeys
로서 서로가GroupKey(s)
같은있을 것이다GroupScore
. - 관련
GroupKeys
없는 점수도 같습니다.
다음은 내가 요구하는 것을 설명하는 예입니다.
GroupTable RecordTable
GroupKey RecordCount GroupScore RecordKey GroupKey
------------------------------------ ---------------------
1 3 6.2 A 1
29 2 9.8 A 29
95 3 6.2 A 95
192 4 7.1 A 192
B 1
B 29
B 95
B 192
C 1
C 95
D 192
E 192
출력은 다음과 같습니다.
GroupKey RecordCount GroupScore
-------------------------------------
1 3 9.8
192 4 9.8
GroupTable
약 75M 개의 행 RecordTable
이 있고 약 115M 개의 행이 있습니다. 그러나 결합 및 WHERE
술어 후에 는 주어진 날에 약 20k 행이있는 경향이 있습니다.
이 질문이 사소한 경우 사과하지만 어떤 이유로 든든 실제로 어려움을 겪고 있습니다.