私はこのようなステージングテーブル持っている:私は、挿入したい最も効率的な方法
CREATE TABLE `final_tbl` (
`row_id` BIGINT NOT NULL AUTO_INCREMENT,
`created_here_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`desc_text` TEXT NOT NULL);
:
CREATE TABLE `staging` (
`created_here_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`desc_text` TEXT NOT NULL);
そして、先のテーブルをとdesc_textが存在しない場合にのみ、final_tblに書き込む。
- チェック、その後desc_text列のSHA224値を格納する「final_tbl」内の列を維持final_tbl
- に挿入されていない場合staging.desc_textは、final_tbl.desc_textに存在する場合:私は2つの選択肢を考えています。 staging.desc_textのSHA224の値と最終テーブルのSHA224の列を比較し、挿入するか無視するかを決定します。
どのオプションが高速になるか知りたいですか?
ありがとうございましたGordonさん、あなたの提案の代わりに、私が "final_tbl(desc_text、sha224)にignoreを挿入すると、desc_text、sha224をステージングから選択"を使用します。 final_tblにレコードを挿入している間、mysqlは最初に一意のキー列をチェックし、 'desc_text'列を比較するのではなく、直後に決定しますか? – abb
@ abb。 。 。同様のことを考えていましたが、同じsha224値を持つ2つの異なる「desc_text」値があると、2番目の文字は挿入されません。そのようなハッシュの衝突は、かなり稀ですが、不可能ではありません。 –
比較的短いMD5であっても、9兆のチャンスが1つしかないので、9兆の文書でそのような誤ったヒットが起こります。 –