# پایگاه‌های داده > سایر پایگاه‌های داده > MySQL > مقاله: تفاوت myISAM و innoDB در موتور ذخیره سازی پایگاه داده !

## pani.khoram

موتور های پایگاه داده myISAM  و InnoDB  ، تفاوت ها و نقاط ضعف و قدرت هر کدام ! بخش بسیار زیادی از کاربران امروزی در پایگاه داده های معروف با این سوال مواجه شده اند که ایا innoDB  ارزش استفاده را دارد یا خیر ؟  من همیشه برای موتور های ذخیره سازی خودم از innoDB استفاده می کنم . کاربری آسان ، قدرت کنترل دوره نقاهت در سیستم های پایگاه داده ، پشتیبان گیری آنلاین آسان تر و رفع مشکل قفل شدن کل جدول در سیستم های myISAM و بسیاری موارد دیگر که به تفکیک در ادامه مقاله امده است .   ولی با تمام این موارد هنوز هم باید نکاتی را در نظر گرفت .  دلیل استفاده از myISAM ؟ فقط به خاطر پیش فرض بودن در سیستم یا قابل انتخاب بودن ان است ؟ خیلی وقت ها این سوال  مهمی برای یک معمار دیتابیس می باشد !  مدیران پایگاه داده متاسفانه در بسیاری از موارد به دلیل پیش فرض بودن myISAM  از آن استفاده می کنند ولی در مواردی هم از این موتور ذخیره سازی به شکل کاملا هوشمندانه و بهینه شده استفاده می شود .  حالا اگر شما هم می خواهید به صورت هوشمندانه از سیستم استفاده کنید پیشنهاد می کنم حتما موارد زیر را مطالعه کنید :  مقایسه از جوانب مثبت و منفی در دو نوع اصلی موتور های ذخیره سازی در پایگاه داده ، myISAM & InnoDB می توان به موارد زیر اشاره کرد :  innoDB موتور ذخیره ساز جدید تری است در حالی که myISAM  گسترده تر است .  innoDB پیچیدگی های بیشتری نسبت به MyISAM ساده دارد .  innoDB در نگهداشت داده ها پاسخگو تر است به نسبت myisam Innodb   از transaction  ها پشتیبانی می کند در حالی که myISAM این قابلیت را ندارد .   innoDB دارای قابلیت کلید خارجی برای ارتباط های محدود در حالی که myisam ان را پشتیبانی نمی کند .  myISAM  قابلیت full-text در ایندکس ها را دارد ولی InnoDB  پشتیبانی نمی کند ( توضیح مختصری در مورد fulltext در انتهای مقاله آمده است ) درست است در بسیاری از موارد بالا Innodb  نقاط قوتی دارد که مطرح شده است ولی هر کدام از این دوتا موتور ذخیره سازی توانایی و ضعف هایی را دارند که معمار دیتابیس پروژه بر اساس نیاز میتواند یکی را انتخاب کند .  به طور خلاصه به مواردی که در ادامه مقاله آمده است توجه فرمایید :  معایب استفاده از Innodb :  به دلیل اینکه در  Innodb شما نیاز به مراقبت از تمام روابط بین جداول درون پایگاه داده را دارید لذا معمار دیتابیس شما نیاز به گذاشتن زمان بیشتری برای طراحی به نسبت myisam  می باشد .  استفاده از فضا اصلی سیستم بیشتری نسبت به Myisam می باشد . که البته وقتی در سایت خود mysql یا اوراکل شما مطالعه می کنید اکیدا بر این نکته اشاره دارد که در صورتی که ساختار پایگاه داده شما در حالت Innodb نمی باشد موتور Innodb نصب شده ( سرویس ) ان را خاموش کنید .  ناتوانی در پشتیبانی از قابلیت های transaction  برای پایگاه داده های حساس  مزایای استفاده از Myisam :  طراحی و پیاده سازی بسیار ساده ، بنابراین بهترین راهکار برای مبتدیان در پروژه های پایگاه داده می باشد .  عدم نیاز به طراحی برای روابط خارجی در بین جداول  در پایگاه داده های سبک ، بسیار سریع تر از innodb  می باشد ، پس هزینه نگهداری سرور هم نیز پایین تر است .  امکان فشرده سازی داده ها برای سرعت بیشتر در هنگام select گرفتن از جداول معایب myISAM :  عدم مدیریت تمامیت داده ها ، ارتباط بین جداول ، هنگامی که این عیب وجود داشته باشد در واقع مسئولیت درست کردن رابطه بین جداول فرآیندی سربار می شود برای برنامه نویس های پروژه . توانایی پشتیبانی از transaction ها که در برنامه های کاربردی و حساس مانند بانکداری بسیار مورد توجه می باشند را ندارد  در حالتی که قرار است رکورد ها بالا مدیریت شوند توسط پایگاه داده ، بسیار کند تر از InnoDB  می باشد مثلا برای اضافه کردن یک رکورد خاص ، کل جدول را قفل می کند و بعد از اتمام کار آزاد سازی جدول را انجام می دهد .  نتیجه : مقایسه را می توان ساده کرد اگر بخواهیم در سیستم به روز رسانی ها مکرر داشته باشیم باید از Innodb حتما استفاده کنیم و اگر از سوی دیگر ، فقط در سیستم نیاز کلی به انتخاب و نمایش و اضافه کردن رکورد ها در حد پروژه های ساده تر می باشد حتما از myISAM  استفاده کنید .  پ . ن : Full Text Search امکان index کردن و جستجوی دیتای متنی را بر مبنای لغات کلیدی در SQL Server  فراهم می کند . بر خلاف LIKE که محدوده عمل آن روی کاراکترهاست ، Full Text Search بر روی کلمات بر مبنای زبان متن ، پرس و جو انجام می دهد . اختلاف سرعت Full Text Search و LIKE در زمانی که می خواهیم یک Query را بر روی چند میلیون رکورد اجرا کنیم بسیار مشهود است . اگر با LIKE دنبال یک ترکیب بگردیم ، تهیه گزارش ممکن است چندین دقیقه طول بکشد در حالی که استفاده از Full Text Search آن را به چند ثانیه کاهش می دهد .


موفق باشید!

----------


## سعید صابری

فکر کنم این مقاله یک کم قدیمی باشه!



> myISAM  قابلیت full-text در ایندکس ها را دارد ولی InnoDB  پشتیبانی نمی کند


در mysql 5.6 موتور Innodb  این قابلیت به طور کامل پشتیبانی می کند.

منبع هم ذکر کنید فکر کنم بد نباشه
در ضمن یک جا شما گفتید innodb میتونه transaction ها را پشتیبانی می کند و دوباره عدم پشتیبانی transaction را جزء معایب innodb ذکر نموده اید.

----------


## pani.khoram

قبل از هر چیزی سلام ، وقت بخیر 
اگه شما خود وبلاگ Innodb رو هم بررسی کنید ، در نسخه 5.6.4 این قابلیت به شکل بار اول ارائه شده است ، که حتی وقتی متن رو مطالعه می کنید می بینید که هنوز نسخه نهایی نیست و بیشتر شبیه یک آزمایش از اجراست و هنوز به قدرت MyISAM نرسیده به طور مثال معایب هایی که حتی خود سایت Innodb هم ذکر کرده موجود است مثل عدم پشتیبانی از چندین زبان بدون فاصله ، عدم استفاده از پلاگین های همراه ، در حال حاضر برای پشتیبانی از این سرویس ، خود سایت مطرح کرده که ما برای رفع مشکل FTS از سرویس خود MyISAM استفاده می کنیم و موارد دیگر . 
من هیچ جایی مطرح نکردم که کدوم از این موتور ها قوی تر یا ضعیف تر هستند که بخوام دفاعی کنم ، مطالب ذکر شده بیشتر طبق تجربه کاریمه . اگه دوستان هم فکر می کنند لازم ندارن و همه این موارد رو خیلی بهتر از من که حتما همین طوره بلد هستند خوب ، من هم مطلبی نمی گذارم . گفتم شاید این مطلب کمک کوچیکی باشه و وحی هم نیست که غیر قابل ویرایش باشه . 
در مورد توانایی Innodb بله transaction رو پشتیبانی می کنه و پیدا کردن این اشتباه در یک مقاله نشون از ریز بینی شماست . در هر صورت تاکید می کنم که Innodb بسیار عالی و قوی از Transaction پشتیبانی می کنه .

موفق باشید

----------


## سعید صابری

دوست عزیز خانم یا آقا.
کار شما بسیار ارزشمند است چون به نظر من Mysql به حقش نرسیده. بنده شخصا خیلی از بانک های اطلاعاتی را امتحان کردم.از جمله مدت چند سالی هم sql server استفاده کردم درست در بیشتر موارد قویتره ولی برای من هیچ وقت به شیرینی Mysql نیست چون از وقتی این بانک انتخاب کردم دیگه دردسر ندارم از جمله اینکه سرعتش هم بیشتره. و دلیل دیگر آسانی در جا به جایی برنامه در سیستم های مختلف و... .

در مورد نظر من چون خیلی ها از کاربران مبتدی میان و این مطالب میخونند دچار گمراهی نشن.

یا عذرخواهی هم بدهکارم چون یک کم تند نوشتم. چون من مطالب خیلی سریع مینویسم زیاد روی کلمات فکر نمی کنم.
تنها هدفم اصلاح مطلب بود نه .... .
ان شاءا... در آینده همچنان شاهد مقاله های شما باشیم.



> من هیچ جایی مطرح نکردم که کدوم از این موتور ها قوی تر یا ضعیف تر هستند


من هم از هیچ کدام دفاع نمی کنم.

----------


## mojtaba.baghban

> به نظر من Mysql به حقش نرسیده. بنده شخصا خیلی از بانک های اطلاعاتی را امتحان کردم.از جمله مدت چند سالی هم sql server استفاده کردم درست در بیشتر موارد قویتره ولی برای من هیچ وقت به شیرینی Mysql نیست


Mysql تا حدودی به حقش رسیده. اونی که مظلوم واقع شده postgresqlــه که پیشنهاد می‌کنم حتما یه امتحانیش بکنید

----------


## سعید صابری

اره تبلیغاتش خیلی کمه چون الان از رشته کامپیوتری بپرسیدی چند تا دیتابیس نام ببر سریع میگه sql,access,mysql و حتی postgresql به گوشش هم نخورده!. بسیار قوی است چون متن باز است!.البته یک دلیل دیگه عدم استقبال به نظر من اینه  پیچیده گی داره برای کسی مبتدی هست یکم سخته.

----------


## abbaszz

سوال از اساتید:
ایا مفهوم قفل جدول در myisam به این معناست که اگر فرضا دو کاربر بصورت کاملا همزمان وارد سایت بشن و دستوری ارسال کنند که نیاز به insert در پایگاه داده داشته باشه، هرکدام از انها که موفق شوند insert اول را انجام دهند نفر دوم باید منتظر ازاد سازی جدول بشه تا insert خودش انجام بشه؟
(البته این زمان بسیار اندک و غیرقابل اندازه گیریه اما مهمه که جواب سوال بالا بله یا خیر باشه)

----------


## abbaszz

اساتییییییییییییییییییییی  د؟؟؟؟؟؟ پاسخ لطفا

----------


## mohammad reza beizavi

برای mysql کاربر مهم نیست
اگر به mysql و البته در MyIsam   دستوری محول شود، تا زمانیکه این کوئری اجرا نشده و نتیجه را fetch نکند اجازه اجرای دستور بعدی را روی آن جدول نمی دهد. (Table Lock)
بحث منتظر ماندن هم درست است اما نه با تصوری که شاید بعضی از دوستان داشته باشند

----------

