저는 데이터 마이닝 프로젝트에서 코드 요소와 관계 및 시간 경과에 따른 이러한 변경 사항을 살펴보고 있습니다. 우리가 원하는 것은 관련 요소가 얼마나 자주 변경되는지 몇 가지 질문을하는 것입니다. 보기로 설정했지만 실행하는 데 10 분 정도 소요됩니다. 문제는 필자가 창 크기에 대한 항목을 비교하기 위해 뺄셈, 연결 및 문자열 비교를 많이해야한다는 것입니다.하지만이를 해결할 좋은 방법을 모르겠습니다. 쿼리는특정 SQL 쿼리 최적화 도움말 필요
같은select aw.same
, rw.k
, count(distint concat_ws(',', r1.id, r2.id)) as num
from deltamethoddeclaration dmd1
join revision r1
on r1.id=FKrevID
join methodinvocation mi
on mi.FKcallerID = dmd1.FKMDID
join deltamethoddeclaration dmd2
on mi.FKcalleeID = dmd2.FKMDID
join revision r2
on r2.id = dmd2.FKrevID
join revisionwindow rw
join authorwindow aw
where (dmd1.FKrevID - dmd2.FKrevID) < rw.k
and (dmd2.FKrevID - dmd1.FKrevID) < rw.k
and case aw.same
when 1 then
r1.author = r2.author
when 0 then
r1.author <> r2.author
else
1=1
end
group by aw.same
, rw.k
;
좋아, 그래서 revisionwindow 상점 우리가 관심있는 수정 창 (10, 20, 50, 100) 및 authorwindow 저자 유형 우리는 (같은, 다른 원과 그렇지 않은 매장을 찾습니다 케어). 문제의 일부는 서로 다른 요소가 일치하는 동일한 수정 쌍을 가질 수 있기 때문에 유일한 해킹은 추한 개수 (별개의 concat()) 것입니다. 이렇게하면 작성자와 개정 본의 조합마다 하나씩 12 행의 테이블이 반환됩니다. 'num'아래의 항목은 지정된 방식으로 관련된 수정 본의 고유 한 쌍입니다 (이 경우 변경 방법과 두 방법 중 하나가 다른 방법을 호출 함). 그것은 완벽하게 작동, 그것은 단지 미친 느린 (~ 10 분 실행 시간). 나는 기본적으로 정확성을 희생하지 않으면 서이 작업을 더 잘 수행 할 수 있도록 조언이나 도움을 구하고 있습니다.
모든 기본/외래 키에 대한 색인이 있습니까? 각 테이블의 행은 몇 개입니까? –
'methodinvocation'에 몇 개의 레코드가 있습니까? – Quassnoi
모든 키가 색인됩니다. methodinvocation 테이블에는 약 110,000 개의 항목이 있습니다. deltamethoddeclaration에 120K 항목이 있고 수정 버전이 14K입니다. –