Bạn không muốn có một gen_clust_index khổng lồ (Chỉ mục cụm nội bộ). Kích thước đó là vô cùng lớn ngay cả đối với một chỉ số phụ.
Bạn có thể phải dùng đến các kích hoạt hoặc các thủ tục được lưu trữ để kiểm tra khóa trước.
Bạn cũng có thể nghĩ về việc thực hiện cuộc gọi chức năng SHA1 bằng cách sử dụng VARCHAR(3071)
trường. SHA1 sẽ trả về trường 40 ký tự. Băm này có thể chỉ là những gì bạn cần lập chỉ mục.
Giả sử bạn có cái này
CREATE TABLE mytable
(
id int not null auto_increment,
txt VARCHAR(3071),
primary key (id)
) ENGINE=InnODB;
và bạn muốn tạo một UNIQUE
chỉ mục trên txt. Hãy thử phương pháp 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;
Sau đó, đếm chúng
SELECT COUNT(1) FROM mytable;
SELECT COUNT(1) FROM mytablenew;
Nếu các Đếm giống nhau, HÃY THAM GIA !!! Bây giờ bạn có một chỉ mục duy nhất có độ dài 40. Bạn có thể kết thúc với:
ALTER TABLE mytable RENAME mytableold;
ALTER TABLE mytablenew RENAME mytable;
DROP TABLE mytableold;
Điều này có thể nguyên tử hơn như được chỉ ra trong các ý kiến dưới đây:
RENAME TABLE mytable TO mytableold, mytablenew TO mytable;
DROP TABLE mytableold;
Thực hiện điều này trên bất cứ bảng nào bạn dự định có cột lớn này. Bạn phải nhớ thêm SHA1 của dữ liệu cùng với dữ liệu trên INSERT
.
Tỷ lệ cược của các khóa trùng lặp là 1 trong 2 đến 160, (1.4615016373309029182036848327163e + 48. Nếu tôi nhận được con số chính xác, tôi sẽ đăng nó vào một ngày nào đó).
Hãy thử một lần !!!