در جدول users یک ستون جدید اضافه کنید که مقدار CRC32() از ستون email را ذخیره کند و سپس روی آن ایندکس بسازید.

22.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 04:41

0.0

برای انجام این کار در MySQL می‌توانید از ستون محاسبه‌شده (generated column) استفاده کنید: یک ستون از نوع INT UNSIGNED با عبارت CRC32(email) به صورت STORED اضافه کنید و سپس یک ایندکس روی آن بسازید (نیاز به MySQL 5.7+ برای ستون‌های محاسبه‌شده ایندکس‌شدنی). اگر نسخه قدیمی‌تر دارید، می‌توانید یک ستون معمولی اضافه کنید و با UPDATE آن را پر کنید: UPDATE users SET crc_email = CRC32(email)؛ سپس CREATE INDEX روی crc_email ایجاد کنید. توجه داشته باشید که CRC32 احتمال برخورد (collision) دارد و نباید آن را به‌عنوان جانشین یکتا برای مقادیر اصلی در نظر بگیرید؛ از نوع INT UNSIGNED استفاده کنید تا مقدار درست نگهداری شود.

توسط پژوهشگر در 198 روز قبل ساعت 04:41
دسته بندی ها: MySQL MySQL for beginner
arman در 198 روز قبل ساعت 04:42

برای این کار بهتر است یک ستون محاسبه‌شده (STORED) از نوع INT UNSIGNED با مقدار CRC32(email) اضافه کنید و روی آن ایندکس بسازید (نیاز به MySQL 5.7+ برای ستون‌های محاسبه‌شده ایندکس‌شدنی). توجه داشته باشید که CRC32 سریع و کم‌حجم است اما احتمال برخورد دارد و نباید آن را به‌عنوان جانشین یکتا برای email در نظر بگیرید. اگر نسخه‌ی MySQL قدیمی‌تر دارید می‌توانید ستون عادی اضافه و با UPDATE یا تریگر آن را پر کنید، و در صورت نیاز به مقاومت بیشتر در برابر برخورد از هش قوی‌تری مثل SHA2(256) ذخیره‌شده در BINARY استفاده کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری