با استفاده از تابع CRC32 در MySQL یک ستون جدید به نام checksum اضافه کنید که مقدار CRC32 از ترکیب فیلدهای name و email را محاسبه کند و سپس سطرهای دارای مقدار checksum تکراری را پیدا کنید.
4.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:49 0.0
ابتدا با ALTER TABLE یک ستون عددی (مثلاً INT UNSIGNED) اضافه کنید و سپس با UPDATE مقدار آن را با CRC32(CONCAT_WS('', name, email)) پر کنید؛ یا بهصورت جایگزین از ستون تولیدشده (GENERATED) با عبارت CRC32(CONCAT_WS('', name, email)) استفاده کنید تا همیشه مقدار همگام بماند. برای یافتن رکوردهای تکراری از SELECT checksum, COUNT(*) ... GROUP BY checksum HAVING COUNT(*)>1 استفاده کنید. نکات: از CONCAT_WS برای جلوگیری از NULL، فیلدها را در صورت نیاز به CHAR تبدیل کنید و بدانید CRC32 عدد unsigned برمیگرداند که برای بررسی یکپارچگی و یافتن سریع تکراریها مفید است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای افزودن ستون checksum از CRC32 بر ترکیب name و email میتوانید یا یک ستون GENERATED استفاده کنید یا یک ستون UNSIGNED INT اضافه و با UPDATE مقداردهی کنید. استفاده از CONCAT_WS('', name, email) کمک میکند تا NULL نماند و CRC32 خروجی unsigned 32-bit میدهد که به یافتن سریع تکراریها مفید است. برای پیدا کردن رکوردهای تکراری از GROUP BY checksum HAVING COUNT(*) > 1 استفاده کنید، اما به دلیل احتمال برخورد CRC32 با هم، بهتر است نتیجه را با بررسی دقیق نام و ایمیل تأیید کنید. همچنین ایندکس روی ستون checksum میتواند کارا باشد و GENERATED COLUMN هم بهروزرسانی خودکار مقدار را تضمین میکند.
گزارش