مقایسه InnoDB و MyISAM

Databases (پایگاه های داده) > MySQL / MariaDB
در مقاله زیر به مقایسه InnoDB و MyISAM که دو موتور ذخیره سازی MySQL می باشند می پردازیم:
 
  • در صورت Crash  شدن و یا یک خاموش شدن اتفاقی دیتابیس در InnoDBاین قابلیت وجود دارد که بواسطه لاگ های موجود، بازگردانی ارتباط مربوطه صورت گیرد.ولی در موتور MyISAM بدلیل عدم وجود مکانیزمی که به یکپارچه سازی داده ها کمک کند، نیاز به تعمیر و یا بازسازی دارد و ضمنا هیچ ضمانتی برای بازیابی کامل داده ها وجود ندارد.و همچنان که InnoDB بازگردانی را انجام داده است در MyISAM زمان fix کردن به نسبت افزایش حجم اطلاعات، افزایش خواهد یافت بنابرین در این مواقع InnoDB قابلیت دسترسی بیشتری به اطلاعات را در دیتاهای حجیم تر خواهد داشت.
 
  • در موتورInnoDB با قرار دادن مقدار 1 در متغیر innodb_flush_log_at_trx_commit برای هر transaction  ، لاگ مربوطه را ذخیره می کند که این مورد باعث افزایش ضریب اطمینان خواهد شد.اما در MyISAM این قابلیت وجود ندارد.
 
  • موتور InnoDB این پتانسیل را دارد که با کاهش ضریب اطمینان در برخی از موارد با performance  بالاتری اجرا شود. با قرار دادن متغیرinnodb_flush_log_at_trx_commit به مقدار 0 می تواند در حالتی اجرا شود که تا قبل از اینکه transactions توسط فراخوانده آن کنترل نشود به دیسک سپرده نخواهد شد.
 
  • موتور InnoDB به صورت اتوماتیک ورودی های هم زمان را در قالب یک گروه مشخص خواهد کرد و در یک زمان آنها را در دیسکFulsh  می کند.
 
  • MyISAM برای باز خوانی کش به اطلاعات سطر ها و ایندکس ها، از بلوک کشfilesystem   استفاده می کند اما InnoDB این قابلیت را در موتور خودش دارا می باشد و کش سطر ها را با کش ایندکس ها ترکیب می کند.
 
  • InnoDB سطر ها را درprimary key  در صورت وجود قرار می دهد و در غیر این صورت در اولین   unique key  ذخیره خواهد کرد. چنانچه اینkey به صورت مناسبی انتخاب شود به صورت قابل توجهی در سرعت تاثیر خواهد داشت.در صورتی که هیچprimary key  یا unique key  وجود نداشته باشد موتور InnoDB یک unique integer key داخلی ایجاد خواهد کرد که رکوردها را فیزیکی در یک ترتیب ورودی به صورت سردستی ذخیره خواهد کرد، همانند MyISAM.
 
  • InnoDB صفحه ذخیره سازی فشرده LZW را با قابلیت آپدیت برای دو حالت دیتا و ایندکس ها ارائه می کند. در MyISAM جداول فشرده شده قابلیت آپدیت را ندارند.
 
  • وقتی عملیاتی در مدل ACID اجرا می شود، InnoDB می بایست برای هر transaction  حداقل یک بار flush به دیسک را انجام دهد. بنابرینflushها را برای ورود از چندین کانکشن ترکیب می کند.برای یک هارد یا آرایه های معمولی، تقریبا 200 آپدیت را برای هر transaction تحمیل خواهد کرد.برای اپلیکیشن هایی که نیازمند نسبت transaction  بالایی می باشند به دیسک کنترلر هایی با قابلیت write caching  و و باطری بک آپ نیاز دارید تا بتواند به صورت تمام transactional  کار کند.همچنین InnoDB  دارای حالت های مختلفی می باشد که می تواند تاثیر قابلیت فوق را کاهش دهد اما همچنان قابل اطمینان تر از MyISAM می باشد.
    MyISAM هیچ کدام از قابلیت های بالایی را ندارد فقط به این علت که transactions را پشتیبانی نخواهد کرد.
 
  • در InnoDB هنگامی که تعداد زیادی عملیات نوشتن وجود دارد با توجه به قابلیت قفل سطح ردیف، این عملیات می توانند بطور همزمان اجرا شوند اما قابلیت قفل کردن سطح جدول در MyISAM اجازه چنین کاری را نمی دهد.
 
  • هر دو موتور جستجو InnoDB و MyISAM از قابلیت full-text search پشتیبانی می کنند اما از MySQL 5.6.4  به بعد فقط در InnoDB از full-textایندکس ها پشتیبانی می شود.

Add Feedback