Tôi đã có một bảng lớn với một cái gì đó giống như 8 300 000 hàng (sẽ không được chỉnh sửa cũng không xóa bao giờ).Tăng tốc các chỉ mục của tôi trong MySQL - CRC hoặc MD5?
Cột đầu tiên của tôi trông giống như vậy P300-4312B_X16_S
và mục nhập không phải là duy nhất vì vậy tôi sử dụng INDEX thông thường trên trường này.
Tuy nhiên, MySQL nhanh hơn bằng cách sử dụng trường nhị phân thay vì một varchar vì vậy tôi mã hóa INDEX của tôi trong MD5 bằng cách sử dụng BINARY(16)
để lưu trữ dữ liệu.
Sáng nay, tôi bắt đầu sử dụng CRC32 lần đầu tiên và tôi thấy rằng CRC32 có thể được xuất dưới dạng chuỗi thập lục phân bằng 8 ký tự.
Câu hỏi của tôi: Nếu tôi sử dụng CRC32 thay vì MD5, nó sẽ nhanh hơn. Tuy nhiên, khi CRC32 được chạy qua, giả sử 2 000 000 giá trị duy nhất, kết quả sẽ là duy nhất hoặc có thể đôi khi tôi sẽ có hai lần cùng một chuỗi cho hai chuỗi differents? Tôi hỏi rằng vì kết quả chỉ dài 8 ký tự (32b) thay vì 32 (128b) như MD5.
Cảm ơn.
hãy xem trang này: http://www.dslreports.com/forum/remark,13525942 – jcho360
Tất nhiên bạn sẽ nhận được nhiều xung đột hơn với CRC32. Nó là một công cụ để kiểm tra tính toàn vẹn dữ liệu, không phải là hàm băm như md5. Hàm băm được thiết kế để tạo ra ít va chạm (cùng một kết quả cho đầu vào khác nhau) nhất có thể. CRC thì không. – dmitry
'Tuy nhiên, MySQL là WAY nhanh hơn bằng cách sử dụng một trường nhị phân thay vì một varchar vì vậy tôi mã hóa INDEX của tôi trong MD5 bằng cách sử dụng BINARY (16) để lưu trữ dữ liệu.' Có vẻ như chỉ mục của bạn bị hỏng. Lập chỉ mục trên một 'VARCHAR' sẽ hoạt động tốt .. –