چاپ / PDF
امتیاز
(3 )

مقایسه ی انجین های MyISAM و InnoDB در MySQL

مقایسه ی انجین های MyISAM و InnoDB در MySQL

مقایسه ی انجین های MyISAM و InnoDB در MySQL

همانطور که میدانید دیتابیس mysql دارای انجین های متنوعی برای مدیریت پایگاه داده و جداول میباشد که لیستی از آنها را در زیر مشاهده میکنید:

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • Merge
  • Archive
  • Federated
  • Blackhole

شاخص ترین انجین یا همان موتور دیتابیس InnoDB میباشد که به دلیل ویژگی هایی که دارد به عنوان انجین اصلی در طراحی جداول دیتابیس بیشتر سیستم های مدیریت محتوایی که با PHP طراحی شده اند مورد استفاه قرار گرفته است.این در حالی است که در گذشته نه چندان دور اکثر سیستم های مدیریت محتوا از انجین MyISAM استفاده میکرده اند.

مقایسه ی MyISAM و InnoDB

در اینجا به چند تفاوت شاخص در این دو انجین اشاره میکنیم:

  • سیستم قفل گذاری: در انجین MyISAM زمانی که قرار است اطلاعاتی وارد یک جدول از دیتابیس شود ، MyISAM به صورت خودکار کل جدول شما قفل میشود تا زمانی که اطلاعات وارد جدول شده و سپس دستور insert بعدی اجرا میشود ، یعنی شما در یک لحظه نمیتوانید چندین insert را در کل یک جدول انجام دهید.اما در InnoDB هنگام insert کردن داده ها ، تنها همان فیلدی که در حال دریافت داده است قفل شده و کل جدول قفل نمیشود و از این جهت سرعت ورود داده ها در InnoDB بالاتر میباشد.
  • Relation ها و Foreignkey : تفاوت عمده و مهم دیگری که در این دو انجین وجود دارد عدم امکان ایجاد Foreignkey در MyISAM میباشد که به همین دلیل امکان ساخت Relation بین جداول در MyISAM وجود ندارد . اگر معماری جداول دیتابیس پروژه ی شما مبتنی بر Relation های مهمی است حتما باید از انجین InnoDB استفاده نمایید.
  • Transaction ها : اشکال دیگری که در MyISAM وجود دارد عدم وجود ویژگی Transaction میباشد . ویژگی Transaction امکان میدهد که قبل از درج اطلاعات صحت آنها را بررسی کنیم و در صورت عدم صحت اطلاعات را وارد دیتابیس نکنیم و به مرحله ی قبلی برگردیم و یا به اصطلاح roll back انجام دهیم.در فریم ورک لاراول از امکان roll back استفاده ی زیادی میشود و اگر دیتابیس شما بر روی انجین MyISAM قرار داشته باشد امکان roll back وجود ندارد.
  • کرش کردن جداول دیتابیس : در انجین MyISAM به دلیل ساختار ، خواندن اطلاعات سرعت بیشتری دارد به همین دلیل گاه و بی گاه برخی جداول شما دچار صدمه یا به اصطلاح کرش (crash) میشوند که نیاز دارید تا با fix یا تعمیر جداول مشکل کرش کردن را رفع کنید و این در حالی است که اگر شما جدولی با چند میلیون رکورد داشته باشید ، تعمیر آن در صورت کرش کردن ممکن است روزها زمان ببرد!! . در انجین InnoDB مشکل کرش کردن وجود ندارد.

مهاجرت از MyISAM به InnoDB

اگر تصمیم گرفته اید که جداول خود را از MyISAM به InnoDB تغییر بدید راه حل ساده است.به دو روش میتوانید اینکار را انجام دهید.یکی با استفاده از یک کوئری ساده و دیگری از طریق phpmyadmin میباشد که هر دو روش را به شما توضیح خواهیم داد.دقت کنید که تغییر از MyISAM به InnoDB مشکلی برای داده های شما ایجاد نمیکند ولی با اینحال همیشه بک آپ گرفتن از اطلاعات هنگام تغییرات در دیتابیس را فراموش نکنید.

  • تغییر انجین جدول از MyISAM به Innodb در برنامه ی phpmyadmin

ابتدا طبق تصویر زیر جدول خود را با کلیک روی گزینه ی Structure انتخاب کنید

اکنون وارد قسمت Operations شده و طبق تصویر گزینه ی InnoDB را انتخاب و در آخر بر روی دکمه ی Go کلیک کنید تا انجین جدول شما تغییر نماید

  • تغییر انجین جدول از MyISAM به InnoDB با استفاده از کوئری

برای اجرای یک کوئری که انجین جدول یا جداول خود را یکجا تغییر دهید میتوانید از کوئری زیر استفاده نمایید.دقت کنید که در کوئری زیر بجای عبارت table_name نام جدول خود را قرار دهید

ALTER TABLE table_name ENGINE=InnoDB;

نحوه ی تغییر انجین پیشفرض در سرور MySQL

شاید این پرسش برای شما بوجود آید که چگونه انجین پیشفرض در سرور MySQL را تغییر دهیم؟ برای مثال اگر به صورت پیشرفرض انجین MyISAM بر روی سرور MySQL شما فعال باشد ، هر جدولی که در دیتابیس های خود ایجاد کنید در همان ابتدا از نوع MyISAM هستند و مجبورید که هنگام ساخت جدول و یا پس از ساخت انجین را تغییر دهید که کار شما را بیشتر میکند.

پس راه حل بهتر این است که با یک کوئری ساده برای همیشه انجین پیشفرض در سرور MySQL را تغییر دهیم تا به صورت خودکار با ساخت هر جدولی InnoDB برای ما تنظیم گردد.کافیست کوئری زیر را در phpmyadmin و در سربرگ sql تایپ کنید و اجرا کنید:

SET GLOBAL default_storage_engine=INNODB;