2009-11-19 2 views
0

, 아래의 원시 데이터 및 원시 데이터의 압축 된 버전 보유하고 두 번째 보여주는 첫 번째 나열된 나는 두 개의 테이블이있는 경우 :삽입하지 쿼리 및 업데이트 차이

raw_table을 :

val 
1 
1 
2 
2 
2 
3 
3 
4 

comp_table :

val  count 
1   2 
2   3 
3   2 
4   1 

내가있는 raw_data을 압축 할 다른 테이블에

INSERT INTO comp_table VALUES (
    SELECT val, COUNT(val) FROM raw_table 
    WHERE val NOT IN(
     SELECT val FROM comp_data 
    ) GROUP BY val 
) 

첫 번째 질문 : 위의 구문이 정확합니까?

두 번째 질문 : 업데이트가 가장 효율적으로 수행되는 쿼리는 무엇입니까?

참고 :는 데이터의 크기는 사전에 raw_table

감사의 백만 레코드 초과 : D

답변

1

즉, 쿼리 아마 일 것이다, 그러나 이것은 ON DUPLICATE KEY UPDATE에 대한 좋은 사용 사례입니다 :

INSERT INTO comp_table (val, val_count) 
SELECT 
    val, 1 
FROM comp_data 
ON DUPLICATE KEY UPDATE val_count = val_count + 1; 

삽입 쿼리가 실행될 때 처음,이 값을 삽입하고, 같은 값이 삽입되어, 카운트가 증가 될 것이다 후 언제든지 1로 카운트를 설정한다.

참고 :이 기능을 사용하려면 comp_table의 val 열에 고유 키가 있어야합니다. 내가 Bradym에서 뭐가에서

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

타이 : 신용 그에게

INSERT INTO comp_data SELECT val, COUNT(val) FROM raw_data GROUP BY val ON DUPLICATE KEY UPDATE count = (SELECT COUNT(val) FROM raw_data WHERE raw_data.val = comp_data.val) 

시도와 테스트를 진행 D I 작동하는 방법 : D를 –

0

: D