2016-09-28 3 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 

はInnoDBの下では、これが第2のサブクエリを必要としないと動作しますが、その後、ネイティブ CHECKSUM TABLEはyour_table でも動作します: 次のクエリでは、トリックを行います。 ORDER BY句で指定できる順序にかかわらず、内部処理は結果のソート前に行われ、NDBではこの順序が常に同じではありません。この場合、強制的に強制する必要があります。したがって、特定の並べ替え順を持つ2番目のサブクエリです。

これをNDBで動作させるために最初に支払うのは、テーブルと同じ大きさの2番目のサブクエリによって作成された内部オーダーテンポラリテーブルです。これはこのクエリを使用する際に注意することです。

第2価格は、この仮注文テーブルを作成するのにかかる時間です。 100Kの行を持つテーブルのテストでは、サブクエリで約1.5〜2秒、クエリなしで約100ミリ秒かかりました。

このソリューションは、このことができますthis blog

・ホープで見つけ、より一般的なものに基づいています。

関連する問題