Справочник на статиите
Механизмът за съхранение на таблица в базата данни е като двигателя на кола; промяната на двигателя веднага променя производителността и характеристиките. Много хора мислят, че базата данни е само за съхранение на данни, но когато всъщност започнете да работите с нея... 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 и 10+ на MariaDB и InnoDB.
Следователно, освен ако не използвате по-стара версия, няма нужда да преминавате към MyISAM за пълнотекстово индексиране.
Процес на най-добри практики
Резервни копия на данни Преди конвертиране, не забравяйте да експортирате.
.sqlФайловете се съхраняват, за да се гарантира, че могат да бъдат възстановени по всяко време.Структура на контролния списък Използвайте следната команда, за да проверите дали съществува външен ключ:
SHOW CREATE TABLE `你的表名`;Извършете преобразуване 使用
ALTER TABLEКато алтернатива, могат да се използват пакетни скриптове за завършване на конвертирането.Проверете здравословното състояние След като преобразуването е завършено, изпълнете:
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;Това потвърждава, че таблицата функционира правилно и освобождава фрагменти.
Метод за обратно възстановяване
Ако след преобразуването се наблюдава влошаване на производителността или проблеми с бизнес логиката, можете да се върнете към InnoDB по всяко време:
ALTER TABLE `你的表名` ENGINE = InnoDB;
Това се нарича „обратима операция“, която ви дава изход.
Цитирани авторитетни гледни точки
Според Официална документация на MySQL Обяснение:
"Конструкция на външен ключ"aints се поддържат само от InnoDB. Ако конвертирате таблица в MyISAM, всички външни ключове ще бъдат игнорирани.
——Справочник за MySQL, Глава 14.6.6 Ограничения на външния ключ
Това твърдение ясно ни казва, че външните ключове са напълно невалидни в MyISAM.
и Официална документация на MariaDB Беше подчертано също, че:
MyISAM не поддържа транзакции. Приложенията, разчитащи на целостта на транзакциите, не трябва да използват MyISAM.
——База знания на MariaDB, Механизми за съхранение
Ето защо трябва да помислите два пъти, преди да направите смяна.
Моята гледна точка и заключение
Конвертирането на InnoDB в MyISAM е като подмяна на двигателя на луксозен автомобил с двигател на камион.
Може да работи, но работи по съвсем различен начин.
Ако вашият бизнес включва леки статистически заявки, скоростта и простотата на MyISAM може да са по-подходящи.
Ако обаче системата ви разчита на транзакции и външни ключове, прибързаното им конвертиране е като премахване на въздушната възглавница.
Следователно, истинската мъдрост не се крие в сляпото преследване на скоростта, а в балансирането между стабилност и производителност.
Изборът на база данни определя душата на системата.
Овладяването на уменията за превключване на двигатели за съхранение е не само демонстрация на технически способности, но и издигане на архитектурното мислене.
Ако обмисляте групово преобразуване, моля, първо направете цялостна оценка на риска.
Стартирайте тестовата среда веднъж, за да симулирате реални бизнес сценарии.
След като потвърдите, че всичко е правилно, изпълнете командата в производствената среда.
Базите данни не са играчки; те са сърцето на корпоративните данни.
И ти си този, който контролира ритъма на сърцето си.
Блог на Hope Chen Weiliang ( https://www.chenweiliang.com/ Статията „Как да конвертирате пакетно InnoDB таблици в MyISAM таблици в MySQL/MariaDB бази данни?“, споделена тук, може да ви бъде полезна.
Добре дошли да споделите връзката към тази статия:https://www.chenweiliang.com/cwl-34157.html
