2016-09-28 7 views

답변

1

질문을 올바르게 이해하면 NDB 엔진을 기반으로 할 때 mysql 테이블의 체크섬을 얻는 방법을 묻습니다.

SELECT @crc as crc FROM 
(
    select @crc := '' 
) tmp, 
(
    SELECT min(
      length(
      @crc := sha1(
         concat(
         @crc, sha1(
          concat_ws('#', field_1, field_2, ...) 
           ) 
          ) 
         ) 
       ) 
       ) 
      ) 
      FROM 
      (
       SELECT field_1, field_2, ... FROM your_table 
       ORDER BY yourtable_some_key_id 
      ) tmp_1 
) final 

가 이노에서이 제 2 서브 쿼리를 필요가 없을 것입니다 및 작동합니다,하지만 기본 CHECKSUM 표가 your_table 도 작동합니다 : 다음 쿼리는 트릭을 할 것입니다. ORDER BY 절에서 지정할 수있는 모든 순서에도 불구하고 결과를 정렬하기 전에 내부 처리가 수행되며 NDB에서는이 순서가 항상 동일하지는 않습니다. 이 경우 강제로해야하므로 특정 정렬 순서가있는 두 번째 하위 쿼리가 필요합니다.

NDB에서이 작업을 수행하는 데 드는 첫 번째 가격은 두 번째 하위 쿼리에 의해 생성 된 내부 순서화 된 임시 테이블이며이 쿼리를 사용할 때 유의해야 할 점 중 하나입니다 .

두 번째 가격은 임시 주문 테이블을 만드는 데 걸리는 시간입니다. 100K 행을 가진 테이블에 대한 테스트에서 쿼리는 하위 쿼리로 약 1.5-2 초가 걸리고 약 100msec가 걸렸습니다.

이 솔루션이 도움이 this blog

희망에서 발견되는 일반적인 일을 기준으로합니다.