Đề xuất băm MD5 mà bạn có là rất tốt - nó được ghi lại trong MySQL 2nd Ed hiệu suất cao. Có một số thủ thuật để làm cho nó hoạt động:
TẠO url BẢNG (id NOT NULL khóa chính auto_increment, url varchar (255) không null, url_crc32 INT UNSIGNED không null, INDEX (url_crc32));
Các truy vấn chọn phải trông như thế này:
CHỌN * TỪ urls WHERE url =' http://stackoverflow.com 'AND url_crc32 =crc32 (' http://stackoverflow.com ');
Url_crc32 được thiết kế để hoạt động với chỉ mục, bao gồm url trong mệnh đề WHERE được thiết kế để ngăn xung đột băm.
Tôi có thể khuyên bạn nên sử dụng crc32 trên md5. Sẽ có một vài va chạm nữa, nhưng bạn có cơ hội cao hơn để khớp tất cả các chỉ mục trong bộ nhớ.