私は8 300 000行のようなもので巨大なテーブルを持っています(編集も削除もされません)。MySQLでインデックスを高速化する - CRCまたはMD5?
私の最初の列は何かのように見えるP300-4312B_X16_S
エントリは一意ではないので、このフィールドには通常のINDEXを使用します。
しかし、MySQLは、varcharの代わりにバイナリフィールドを使用する方が高速です。したがって、BINARY(16)
を使用してデータを格納するMD5でINDEXをエンコードします。
今朝、私はCRC32をはじめて使用し始めました。CRC32は8文字を使って16進文字列として出力できることがわかりました。
私の質問:MD5の代わりにCRC32を使用すると高速になります。しかし、CRC32が2 000 000のユニークな値を言うとすると、結果は一意になるか、まれに2つの異なる文字列に対して同じ文字列を2回持つことになりますか?結果はMD5のように32(128b)ではなく8文字(32b)にすぎないため、私はそれを尋ねます。
ありがとうございました。
このページをご覧ください:http://www.dslreports.com/forum/remark,13525942 – jcho360
もちろん、CRC32との衝突が増えます。これは、md5のようなハッシュ関数ではなく、データの完全性チェックのためのツールです。ハッシュ関数は、できるだけ少ない衝突(異なる入力に対して同じ結果)を生成するように設計されています。 CRCはそうではありません。 – dmitry
'しかし、MySQLはvarcharの代わりにバイナリフィールドを使う方が速いので、MD5でBINARY(16)を使ってINDEXをエンコードしてデータを保存します.'あなたのインデックスが壊れているようです。 'VARCHAR'を使った索引作成はうまくいくはずです。 –