전체 데이터는 약 53만건 정도되고, 각 값들이 상위 몇 %에 해당하는 지 구해 서 DB에 넣으려고 합니다...
예를 들어 다음과 같습니다. 아래의 계산식으로 %까지 구해서 넣고자 합니다.
갯수는 동점자 숫자입니다.
아래처럼 계산하기 위해서 먼저 각각의 갯수를 구한 뒤 다시 이전 등수까지의 합계를 구합니다.
이전 등수까지 합계 구하는 부분이 문제가 되고 있습니다.
등수 | 갯수 | 합계 | 상위 %
-----------------------------------
1 | 1 | 1 | (1/15) * 100
2 | 2 | 3 | (3/15) * 100
3 | 7 | 10 | (10/15) * 100
4 | 3 | 13 | (13/15) * 100
5 | 2 | 15 | (15/15) * 100
합계 15
문제는 속도입니다. 16만건 인서트를 테스트하기 위해 sqlYog에서 실행 하는데도 끝나질 않습니다.
db스키마입니다.
TempRankCal과 TempTB는 동일 구조입니다.
>>>
create table TempTB
(
Standard float default 0,
Rank float default 0,
SumCount float default 0
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
create index IDX_ST on TempTB(Standard);
-> 원래 double 타입이었다가 혹시나 해서 float로 바꿨습니다.
저장 쿼리입니다.
>>>
insert into TempRankCal
select
B.Rank, B.Standard, sum(A.SumCount) as total
from
TempTB A, TempTB B
where
A.Rank <= B.Rank and
group by B.Rank
쿼리는 간단한데 왜 저렇게 속도가 안 나는 걸까요...
고수님들 좀 도와 주세요.
|