before insert トリガーを使用し、最初の 255 文字のハッシュ (MD5) を使用することをお勧めします
このサンプルを実行する
drop database if exists jakobud;
create database jakobud;
use jakobud
create table mytext
(
id int not null auto_increment,
txt text not null,
txtmd5 char(32) not null default '',
primary key (id),
unique key (txtmd5)
);
DELIMITER $$
CREATE TRIGGER mytext_bi
BEFORE INSERT ON mytext
FOR EACH ROW
BEGIN
DECLARE found_count INT;
SELECT COUNT(1) INTO found_count
FROM mytext WHERE txtmd5 = MD5(LEFT(new.txt,10));
IF found_count = 1 THEN
SELECT COUNT(1) INTO found_count FROM table_that_does_not_exist;
END IF;
SET new.txtmd5 = MD5(LEFT(new.txt,10));
END; $$
DELIMITER ;
次に、大量のデータを mytext にロードします
これにより、最初の 255 文字の MD5 の重複が無視されます。
このように書いたので、txtフィールド自体にインデックスを作成する必要はありません
メリットは何ですか?最初の 255 文字の MD5 が一意でないテキストが入力された場合にトリガーを故意に中断させるため、auto_increment はスキップしません。
試してみる !!!