المحرك الأمثل لجداول البحث الصغيرة في MySQL
-
26-09-2020 - |
سؤال
لدي السؤال التالي:أقوم بتصميم تطبيق ويب يتضمن العشرات من جداول البحث الصغيرة:تحتوي هذه الجداول عادةً على ثلاثة أعمدة (المعرف والاسم والوصف) وصفين (في الغالب أقل من 50، والحد الأقصى حوالي 450).
من المتوقع أن تتغير جداول البحث هذه نادرًا فقط (فهي تأتي من المعيار، الذي يتغير مرة واحدة كل عدة سنوات) وسيتم استخدامها فقط من أجل:
- خيارات التعبئة في تحديد HTML
- يتم ضمها إلى سجلات أخرى في التقارير
سيكون هناك فقط SELECT
البيانات على هذه الجداول 99٪ من المرات، ولكن سيكون هناك الكثير منها.
أنا أتساءل، ما هو محرك قاعدة البيانات الذي سيكون أكثر كفاءة في الاستخدام؟
وهنا اعتباراتي:
ذاكرة
- طليعة:سريع جدا
- يخدع:إذا تعطل الخادم، فسيتم فقدان جميع البيانات ويجب إعادة إنشائها
- يخدع:لا يدعم المفاتيح الخارجية
MyISAM المضغوط
- طليعة:سريع
- يخدع:لا يدعم المفاتيح الخارجية
InnoDB
- طليعة:دعم المفتاح الخارجي
ما أود أن أسأله هو ما إذا كانت هناك ميزة كبيرة في استخدام شيء مختلف عن InnoDB - أداء الحكمة
شكرا زبينك
المحلول
لقد أجبت على سؤال مماثل في أغسطس 2011: ما هو نظام إدارة قواعد البيانات (DBMS) المناسب للقراءة فائقة السرعة وبنية البيانات البسيطة؟
بما أنك تسأل عن MySQL وأي محرك تخزين.لنكون صادقين، من الصعب القول، لأن هناك حالات نادرة يمكن أن يتفوق فيها MyISAM على InnoDB عندما يتعلق الأمر بالتحديدات.
فيما يلي بعض مشاركاتي السابقة حول هذا الجدل
Sep 20, 2011
: أفضل ما في MyISAM وInnoDBMay 03, 2012
: أيهما أسرع InnoDB أم MyISAM؟Jul 05, 2012
: InnoDB مقابل MyISAM مع العديد من الفهارسSep 26, 2012
: اختيار MyISAM بدلاً من InnoDB لتلبية متطلبات المشروع هذه؛وخيارات طويلة المدى
ربما تسأل الآن:لماذا أفضّل MyISAM على InnoDB؟
ألقِ نظرة على هذا الرسم البياني (الذي أنشأه Vadim Tkachenko، Percona CTO)
سيقوم MyISAM بتخزين الفهارس مؤقتًا وسيحتوي الجدول الخاص بك على فهرسين (المفتاح الأساسي في المعرف وفهرس الاسم).من ناحية أخرى، يحتوي InnoDB على عدد كبير جدًا من الأجزاء المتحركة التي لا يمكن استيعابها، خاصة إذا كان يتعين على InnoDB Buffer Pool تحميل ورفض 16 ألف صفحة بشكل دوري.
لكي نكون منصفين، يجب عليك إجراء تجربة.
- اذهب إلى منصبي ما هي الاختلافات الرئيسية بين InnoDB وMyISAM؟.اقرأها بعناية.
- قم بإعداد خادم باستخدام MyISAM وجميع الجداول الخاصة بك باستخدام
ROW_FORMAT=Fixed
(انظر رسالتي ما هو تأثير أداء استخدام CHAR مقابل VARCHAR في حقل ذي حجم ثابت؟) واستخدام كبير key_buffer_size. - قم بإعداد خادم آخر باستخدام InnoDB وكبير innodb_buffer_pool_size.
- أضف بياناتك إلى كلا الخادمين واستفسر عنهما بجنون.
سيعطيك هذا أفضل تقييم لاختيار محرك التخزين لمجموعة البيانات الخاصة بك.
جربها !!!
نصائح أخرى
- "MyISAM المضغوط" - ما هذا؟ربما "الأرشيف"؟
- ليست هناك حاجة للضغط.الجداول صغيرة جدًا، وسيتم تخزينها مؤقتًا بالكامل بسرعة.
FOREIGN KEYS
-- لماذا؟لقد قمت بتصحيح التعليمات البرمجية الخاصة بك، أليس كذلك؟لن يكون هناك أشياء متدلية للتحقق منها.MEMORY
ليس من غير المعقول، لو تقوم بكتابة كود "إعادة التحميل" الذي يتم تنفيذه عندما تقوم بإحضار الخادم، ويتم كتابة أي تحديثات للجدول لكليهما فيMEMORY
جدول النسخ الاحتياطي المستمر.MyISAM
ROW_FORMAT=FIXED
-- تلك حكاية زوجة عجوز؛يستخدمDYNAMIC
وVARCHARs
.- InnoDB "متجمع"
PRIMARY KEY
يجعل عمليات البحث أسرع قليلاً من MyISAM لغرضك. - هل أنت يعرف أن جداول البحث تسبب تباطؤًا ملحوظًا؟أنا أشك بجدية في أنهم كذلك.
- يفعل لا استخدم جداول البحث عن القيم "المستمرة"، مثل
FLOATs
وDATEs
.
أنا أصوت لصالح InnoDB بدون FKs.