Anda tidak ingin gen_clust_index raksasa (Indeks Clustered Internal). Ukuran itu sangat besar bahkan untuk indeks sekunder.
Anda mungkin harus menggunakan pemicu atau prosedur tersimpan untuk memeriksa kunci jauh-jauh hari.
Anda juga bisa berpikir tentang melakukan panggilan fungsi SHA1 menggunakan VARCHAR(3071)
bidang. SHA1 akan mengembalikan bidang 40 karakter. Hash ini mungkin hanya apa yang perlu Anda indeks.
Misalkan Anda punya ini
CREATE TABLE mytable
(
id int not null auto_increment,
txt VARCHAR(3071),
primary key (id)
) ENGINE=InnODB;
dan Anda ingin membuat UNIQUE
indeks pada txt. Coba pendekatan SHA1
CREATE TABLE mytablenew LIKE mytable;
ALTER TABLE mytable ADD txtsha1 CHAR(40);
ALTER TABLE mytable ADD UNIQUE KEY (txtsha1);
INSERT INTO mytablenew (id,txt,txtsha1)
SELECT id,txt,SHA1(txt) FROM mytable;
Lalu, hitung mereka
SELECT COUNT(1) FROM mytable;
SELECT COUNT(1) FROM mytablenew;
Jika Hitungannya Sama, SELAMAT !!! Sekarang Anda memiliki indeks panjang 40 yang unik. Anda dapat menyelesaikannya dengan:
ALTER TABLE mytable RENAME mytableold;
ALTER TABLE mytablenew RENAME mytable;
DROP TABLE mytableold;
Ini bisa lebih atomik seperti yang ditunjukkan dalam komentar di bawah ini:
RENAME TABLE mytable TO mytableold, mytablenew TO mytable;
DROP TABLE mytableold;
Lakukan ini di meja apa pun yang Anda inginkan memiliki kolom besar ini. Anda harus ingat untuk menambahkan SHA1 data bersama dengan data setelahnya INSERT
.
Peluang kunci duplikat adalah 1 dalam 2 ke kekuatan 160 (bahwa 1,4615016373309029182036848327163e + 48. Jika saya mendapatkan angka yang tepat, saya akan mempostingnya suatu hari nanti).
Cobalah !!!