2012-07-21 4 views
2

두 테이블이 있습니다. 총계 데이터Distinct_S1.큰 MySql 테이블에서 값의 빈도 분포를 얻는 효율적인 방법

Total_Data에는 350 만 개의 행이 있습니다. 입력란 : "S1", "S2", "S3", "S4"

Distinct_S1에는 100 만 개의 행이 있습니다. 입력란 : 'S1', '빈도' 의 "S1"Distinct_S1의 "S1"에서 발생하는 모든 고유 한 값으로 구성됩니다. Total_Data. 손

과제 : 의 "주파수"Distinct_S1 S1 = 'XXYY'의 (가정)이 회 'XXYY'의 개수로 구성한다 Total_Data 일어난다.

나는 손에서 작업을 수행하기 위해 (MySQLdb 수입) 파이썬 스크립트 내에서 다음 쿼리를 사용 :

cur.execute("update Distinct_S1 set frequency=(select count(*) from Total_Data where S1='%s') where S1='%s'"%(S1_val, S1_val) 

위의 쿼리가 잘 작동하지만 시간이 많이 걸릴 것으로 보인다. 같은 것을 달성하는 다른 빠른 방법이 있습니까?

답변

1

조인과 함께 다중 테이블 업데이트 구문을 사용하면 모든 행을 한 번에 업데이트 할 수 있습니다. 구문은 manual을 참조하십시오.

그러나 훨씬 쉬운 방법은 고유 값으로 채우지 않고 표의 모든 값을 직접 삽입하는 것입니다.

INSERT INTO Distinct_S1 (S1, frequency) 
SELECT S1, COUNT(*) 
FROM Total_Data 
GROUP BY S1 
+0

위 쿼리를 실행했습니다. 13 분 후, 끝났어! 고마워요! 추신 나는 업데이 트가 삽입보다 비싸고 '파이썬 - 투 - 마이 SQL 투 파이썬 전환'이 많은 시간을 소비했을 수도 있다고 생각합니다. – yang5

관련 문제