فهرست مقاله
موتور ذخیرهسازی یک جدول پایگاه داده مانند موتور یک ماشین است؛ تغییر موتور بلافاصله عملکرد و ویژگیها را تغییر میدهد. بسیاری از مردم فکر میکنند که یک پایگاه داده فقط برای ذخیره دادهها است، اما شما فقط زمانی پیچیدگیهای پنهان را کشف خواهید کرد که واقعاً سعی کنید InnoDB را به MyISAM تبدیل کنید.
چرا کسی باید بخواهد از InnoDB به MyISAM مهاجرت کند؟
در بسیاری از سناریوها، MyISAM سریعتر است، به خصوص برای برنامههایی که نیاز به خواندن زیاد و نوشتن کم دارند مانند پایگاههای داده لاگ و آمار.
مکانیزم قفل سطح جدول آن در واقع تحت همزمانی کم بسیار روان اجرا میشود.
علاوه بر این، ذخیرهسازی فایل در MyISAM شهودیتر است. .MYD ذخیره دادهها، یکی .MYI ذخیره سازی ایندکس ها، مهاجرت و پشتیبان گیری، همگی بسیار راحت هستند.
با این حال، پشتیبانی InnoDB از تراکنشها و کلیدهای خارجی تقریباً در سناریوهای پیچیده تجاری یک ضرورت است.
بنابراین، قبل از انجام این انتقال، باید مشخص کنید که آیا کسب و کار شما واقعاً به این ویژگیها نیاز دارد یا خیر.
دستور اصلی: ALTER TABLE
برای تبدیل یک جدول از InnoDB به MyISAM، فقط به یک خط کد نیاز دارید:
ALTER TABLE `你的表名` ENGINE = MyISAM;
پس از اتمام اجرا، موتور ذخیرهسازی جدول تغییر خواهد کرد.
آیا این سرراست نیست؟
تبدیل دستهای: تولید خودکار اسکریپت
اگر دهها یا حتی صدها جدول دارید، تغییر دستی آنها قطعاً عملی نیست.
در این مرحله، میتوان از یک کوئری واحد برای تولید خودکار دستورات تبدیل دستهای استفاده کرد:
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
بعد از اجرا، تعدادی خروجی خواهد داشت... ALTER TABLE ... بیانیه.
این دستورات را کپی کرده و همه را همزمان اجرا کنید تا تبدیل دستهای به صورت یکجا انجام شود.
این چیزی است که به عنوان "تبدیل دستهای خودکار" شناخته میشود.
ارزیابی ریسک قبل از تبدیل

محدودیتهای کلید خارجی
InnoDB از کلیدهای خارجی پشتیبانی میکند، در حالی که MyISAM اصلاً از آنها پشتیبانی نمیکند.
پس از تبدیل، محدودیتهای کلید خارجی مستقیماً حذف میشوند.
اگر کسب و کار شما به حذف یا بهروزرسانی آبشاری متکی است، منطق پس از تبدیل کاملاً از کار خواهد افتاد.
پشتیبانی تراکنش
InnoDB تراکنشها را دارد و از آنها پشتیبانی میکند. COMMIT 和 ROLLBACK.
MyISAM تراکنش ندارد، فقط قفلهای سطح جدول دارد.
پس از تبدیل، تمام کدهای مربوط به تراکنش نامعتبر میشوند و در صورت بروز استثنا، بازگشت به حالت اولیه غیرممکن خواهد بود.
عملکرد همزمانی
InnoDB از قفلگذاری در سطح سطر استفاده میکند، در حالی که MyISAM از قفلگذاری در سطح جدول بهره میبرد.
در سناریوهای با همزمانی بالا، MyISAM اغلب جداول را قفل میکند و منجر به گلوگاههای عملکرد میشود.
ویژگیهای شاخص
قبل از MySQL 5.6، MyISAM یک فهرست تمام متن منحصر به فرد داشت.
با این حال، در MySQL 5.6+ و MariaDB 10+، InnoDB از اندیسگذاری متن کامل پشتیبانی میکند.
بنابراین، مگر اینکه از نسخه قدیمیتری استفاده کنید، نیازی به تغییر به MyISAM برای نمایهسازی متن کامل نیست.
فرآیند بهترین شیوه
پشتیبانگیری از دادهها قبل از تبدیل، حتماً خروجی بگیرید.
.sqlفایلها ذخیره میشوند تا اطمینان حاصل شود که در هر زمانی قابل بازیابی هستند.با استفاده از دستور زیر، ساختار جدول را بررسی کنید تا ببینید آیا کلیدهای خارجی وجود دارد یا خیر:
SHOW CREATE TABLE `你的表名`;انجام تبدیل استفاده
ALTER TABLEاز طرف دیگر، میتوان از اسکریپتهای دستهای برای تکمیل تبدیل استفاده کرد.وضعیت سلامت را بررسی کنید . پس از تبدیل، دستور زیر را اجرا کنید:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;این تأیید میکند که جدول به درستی کار میکند و قطعات را آزاد میکند.
روش بازیابی معکوس
اگر پس از تبدیل، افت عملکرد یا مشکلات منطق کسبوکار مشاهده شد، میتوانید در هر زمان به InnoDB برگردید:
ALTER TABLE `你的表名` ENGINE = InnoDB;
این چیزی است که «عملیات برگشتپذیر» نامیده میشود و به شما راه خروج میدهد.
دیدگاههای معتبر ذکر شده
طبق مستندات رسمی MySQL :
"تعیین کلید خارجی"aintها فقط توسط InnoDB پشتیبانی میشوند. اگر یک جدول را به MyISAM تبدیل کنید، تمام کلیدهای خارجی نادیده گرفته میشوند.
——راهنمای مرجع MySQL، فصل ۱۴.۶.۶ محدودیتهای کلید خارجی
این عبارت به وضوح به ما میگوید که کلیدهای خارجی در MyISAM کاملاً نامعتبر هستند.
مستندات رسمی MariaDB همچنین تأکید میکند:
«MyISAM از تراکنشها پشتیبانی نمیکند. برنامههایی که به یکپارچگی تراکنشها متکی هستند نباید از MyISAM استفاده کنند.»
——پایگاه دانش MariaDB، موتورهای ذخیرهسازی
به همین دلیل است که قبل از تغییر مسیر باید دو بار فکر کنید.
دیدگاه و نتیجهگیری من
تبدیل InnoDB به MyISAM مثل این است که موتور یک ماشین لوکس را با موتور یک کامیون عوض کنید.
میتواند اجرا شود، اما به روشی کاملاً متفاوت اجرا میشود.
اگر کسب و کار شما شامل پرس و جوهای آماری سبک است، سرعت و سادگی MyISAM ممکن است مناسب تر باشد.
با این حال، اگر سیستم شما به تراکنشها و کلیدهای خارجی متکی است، تبدیل عجولانه آنها مانند برداشتن کیسه هوا است.
بنابراین، خرد واقعی در دنبال کردن کورکورانه سرعت نیست، بلکه در ایجاد تعادل بین ثبات و عملکرد است.
انتخاب پایگاه داده، روح سیستم را تعیین میکند.
تسلط بر مهارتهای سوئیچینگ موتورهای ذخیرهسازی نه تنها نشاندهندهی توانایی فنی است، بلکه نشاندهندهی ارتقای تفکر معماری نیز میباشد.
اگر به تبدیل عمده فکر میکنید، لطفاً ابتدا یک ارزیابی ریسک جامع انجام دهید.
یک بار محیط آزمایشی را اجرا کنید تا سناریوهای واقعی کسب و کار را شبیهسازی کنید.
پس از تأیید صحت همه چیز، دستور را در محیط تولید اجرا کنید.
پایگاههای داده اسباببازی نیستند؛ آنها قلب دادههای سازمانی هستند.
و تو کسی هستی که ریتم قلبت را کنترل می کند.
امیدوارم مقاله «چگونه جداول InnoDB را به جداول MyISAM در پایگاههای داده MySQL/MariaDB به صورت دستهای تبدیل کنیم؟» که در وبلاگ چن ویلیانگ ( https://www.chenweiliang.com/ ) به اشتراک گذاشته شده است، برای شما مفید باشد.
لینک این مقاله را به اشتراک بگذارید: https://www.chenweiliang.com/cwl-34157.html
