ستونی جدید به نام data_checksum از نوع UNSIGNED INT به جدول my_table اضافه کنید، مقدار CRC32ِ ستون data را برای همه ردیفها محاسبه و در آن ذخیره کنید و سپس ردیفهایی که checksum تکراری دارند را فهرست کنید.
3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:33 0.0
با استفاده از تابع سیستمی CRC32 در MySQL میتوانید مقدار هش 32 بیتیِ یک عبارت را محاسبه کنید. ابتدا با ALTER TABLE ستونی از نوع INT UNSIGNED اضافه کنید، سپس با UPDATE مقدار آن را با CRC32(data) پر کنید. برای یافتن مقادیر تکراری از GROUP BY روی ستون checksum و HAVING COUNT(*)>1 استفاده کنید. در صورت نیاز به هشگیری چند ستون از CONCAT یا CONCAT_WS بهره ببرید و برای تسریع جستجو روی checksum ایندکس ایجاد کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
یادآوری مهم: CRC32 فقط یک هش 32بیت است و امکان برخورد (collision) وجود دارد، پس نباید به عنوان شاخص منحصربهفرد استفاده شود. برای افزایش دقت در تشخیص تغییرات میتوانید از ترکیب چند ستون با CONCAT_WS یا استفاده از هشهای مطمئنتری مانند SHA256 استفاده کنید و نتیجه را در data_checksum ذخیره کنید. اگر دادههای ستون data NULL هستند، با COALESCE(data, '') مقدار هش را تضمین کنید تا UPDATE خطا ندهد. برای پیدا کردن ردیفهای تکراری از GROUP BY data_checksum HAVING COUNT(*) > 1 استفاده کنید و در صورت نیاز روی این ستون ایندکس بسازید تا جستجو سریعتر باشد.
گزارش