sql >> データベース >  >> RDS >> Sqlserver

CHECKSUM() と BINARY_CHECKSUM() の違いは何ですか? また、いつ/どのような使用シナリオが適切ですか?

    相違点を強調する次のブログ投稿をチェックしてください。

    http://decipherinfosys.wordpress. com/2007/05/18/checksum-functions-in-sql-server-2005/

    このリンクから情報を追加:

    CHECKSUM 関数の主な目的は、式または列リストに基づいてハッシュ インデックスを作成することです。テーブル内でレコードを一意にする列のチェックサムを示すために、テーブル レベルで列を計算および格納するために使用するとすると、行が変更されたかどうかを判断するのに役立ちます。このメカニズムは、レコードを一意にするすべての列を結合する代わりに使用して、レコードが更新されたかどうかを確認できます。 SQL Server Books Online には、この機能に関する多くの例があります。

    これらの関数を使用する際の注意点:

    比較される 2 つのチェックサム間で列または式の順序が同じであることを確認する必要があります。そうしないと、値が異なり、問題が発生する可能性があります。

    checksum(*) の使用はお勧めしません。その方法で生成される値は、実行時のテーブル定義の列の順序に基づいており、時間の経過とともに簡単に変更される可能性があるためです。したがって、列リストを明示的に定義してください。

    粒度は 1/300 秒であり、わずかな変動でも異なるチェックサム値になるため、datetime データ型列を含める場合は注意してください。そのため、datetime データ型の列を使用する必要がある場合は、正確な日付 + 時間/分を取得するようにしてください。つまり、必要な粒度のレベルです。

    次の 3 つのチェックサム関数を使用できます。

    チェックサム:これについては上で説明しました。

    CHECKSUM_AGG:グループ内の値のチェックサムを返します。この場合、Null 値は無視されます。これは、SQL Server 2005 の新しい分析関数の OVER 句でも機能します。

    BINARY_CHECKSUM:名前が示すように、行または式のリストに対して計算されたバイナリ チェックサム値を返します。 CHECKSUM と BINARY_CHECKSUM の違いは、文字列データ型に対して生成される値にあります。このような違いの例として、「DECIPHER」と「decipher」に対して生成される値は、BINARY_CHECKSUM の場合は異なりますが、CHECKSUM 関数の場合は同じになります (インスタンスの大文字と小文字を区別しないインストールがあると仮定します)。もう 1 つの違いは、式の比較にあります。 BINARY_CHECKSUM() は、2 つの式の要素の型とバイト表現が同じ場合、同じ値を返します。したがって、「2Volvo Director 20」と「3Volvo Director 30」は同じ値を返しますが、CHECKSUM() 関数はタイプを評価し、2 つの文字列を比較し、それらが等しい場合は同じ値のみを返します。

    Example:
    STRING              BINARY_CHECKSUM_USAGE    CHECKSUM_USAGE
    ------------------- ----------------------    -----------
    2Volvo Director 20  -1356512636                -341465450
    3Volvo Director 30  -1356512636                -341453853
    4Volvo Director 40  -1356512636                -341455363
    


    1. SSISパッケージはどこに保存されますか?

    2. MySQLのIPアドレスはどのタイプに保存する必要がありますか?

    3. Accessでパラメータクエリを作成する方法

    4. MySQLdは、5.6から5.7へのbrewアップグレード後に起動しません