Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 13183|Відповідь: 0

[Джерело] MyISAM — це різниця між рушієм зберігання баз даних MySQL та InnoDB

[Копіювати посилання]
Опубліковано 13.04.2020 09:53:49 | | |
Що стосується MySQL, то важко зрозуміти MyISAM та InnoDB, які є двома з найвідоміших і найпоширеніших рушіїв зберігання MySQL. Сьогодні я розповім вам про різницю між MyISAM та InnoDB у MySQL...

Що таке MyISAM?

MyISAM є рушієм зберігання даних за замовчуванням для реляційної системи управління базами даних MySQL (до версії 5.5)。 Ця структура зберігання таблиць MySQL розширює багато корисних функцій зі старого коду ISAM. У новій версії MySQL рушій InnoDB широко замінює MyISAM завдяки перевагам у плані транзакцій, референтної цілісності та більшої паралелності.
Кожна таблиця MyISAM відповідає трьом файлам на жорсткому диску. Усі три файли мають однакову назву файлів, але мають різні розширення для позначення їхньої типової ціль: .frm-файл містить визначення таблиці, але цей файл не є частиною движка MyISAM, а є частиною сервера; .MYD містить дані таблиці; .MYI — індексний файл таблиці.

Що таке InnoDB?

InnoDB — ще один рушій зберігання для MySQL, а нова версія стандарту, випущена MySQL AB, включена у всі бінарні інсталяційні пакети.Від 5.5 як стандартний рушій зберігання даних。 Його переваги над іншими рушіями зберігання — підтримка транзакцій, сумісних із ACID (подібно до PostgreSQL), а також цілісність параметрів (тобто підтримка зовнішніх ключів).

Корпорація Oracle придбала Innobase у жовтні 2005 року. Innobase використовує авторизацію подвійної автентифікації. Він розповсюджується за допомогою GNU і також дозволяє іншим групам, які хочуть інтегрувати InnoDB у комерційне програмне забезпечення, отримати ліцензію.

Найпопулярнішими рушіями зберігання даних є MyISAM та InnoDB. Основні відмінності між MyISAM та InnoDB — це контроль продуктивності та транзакцій. MyISAM є розширеною реалізацією раннього ISAM (індексований послідовний метод доступу, ISAM більше не підтримується після MySQL 5.0), ISAM розроблений для обробки ситуацій, коли частота читання значно перевищує частоту запису, тому ISAM і пізніше MyISAM не враховують підтримку таких речей, виключаючи TPM, не потребують записів транзакцій, ефективність запитів ISAM значна, а споживання пам'яті дуже мало.
MyISAM успадковує ці переваги, водночас не відставаючи від часу завдяки великій кількості корисних нових функцій та пов'язаних інструментів. Наприклад, з урахуванням контролю паралелізму передбачені блокування на рівні таблиці, і хоча сам MyISAM не підтримує стійкість до відмов, його можна використовувати для відновлення після збоїв через myisamchk. Оскільки MyISAM використовує власні незалежні файли зберігання (файл даних MYD і індексний файл MYI) для кожної таблиці, резервне копіювання та відновлення дуже зручне (достатньо копіювати перезапис), а також підтримує онлайн-відновлення. Порівняно з іншими рушіями зберігання, MyISAM має більшість інструментів для перевірки та ремонту таблиць. Таблиці MyISAM можна стискати, і вони підтримують повнотекстовий пошук. Вони не є транзакційно безпечними і не підтримують зовнішні ключі, тому якщо ваш додаток не потребує транзакцій і обробляє лише базові операції CRUD, то MyISAM — це найкращий варіант.
InnoDB розроблена для ситуацій високої паралелізації читання та запису, використовуючи MVCC (Multi-Version Concurrency Control) та блокування на рівні рядків для забезпечення підтримки транзакцій, сумісних із ACID. InnoDB підтримує цілісність зовнішнього ключа та має можливості відновлення після несправностей. Крім того, продуктивність InnoDB насправді досить висока, особливо при обробці великих обсягів даних, офіційно: ефективність процесора InnoDB непорівнянна з іншими дисковими реляційними рушіями зберігання даних. Однак резервне копіювання та відновлення InnoDB трохи складніші, якщо не використовувати підтримку Mulit-tablespace, яку надає версія 4.1 або новіша, оскільки, на відміну від MyISAM, файли даних InnoDB не відповідають кожній таблиці окремо. Натомість використовується спільний простір таблиці, і простий метод перезапису копіювання йому не підходить, тому дані потрібно відновити після зупинки MYSQL. Використання tablespacesd для кожної таблиці відповідає окремому файлу tablespace, ситуація значно простіша. Він має ті ж характеристики, що й типи BDB, а також підтримують зовнішні ключі. Таблиці InnoDB швидкі та мають багатші функції, ніж BDB, тому рекомендую, якщо вам потрібен транзакційно захищений рушій зберігання.

Загалом, InnoDB — хороший вибір, якщо потрібна підтримка транзакцій, і має високу частоту одночасного читання та запису. BDB можна розглядати, якщо частота одночасного читання та запису не є високою, але BDB більше не підтримуватиметься у версіях MySQL 5.1 та пізніших. Ця опція зникла

За замовчуванням транзакції InnoDB відкриті (встановлено autocommit = 0), що означає, що кожного разу, коли вставляється запис, таблиця InnoDB розглядає його як окрему транзакцію. Отже, якщо ми вставимо 10 000 записів і не закриємо транзакцію, тоді таблиця типу InnoDB розглядатиме це як 10 000 транзакцій, а загальний час вставки на цей момент дуже довгий, тож ми повинні спочатку вимкнути транзакцію, а потім вставити її, тому швидкість буде дуже високою. Щодо Heap і BDB (Berkeley DB), відносно відносно — рівень проникнення гірший, ніж у попередніх двох, але в деяких випадках, Рушій зберігання Heap досі дуже актуальний, він зберігає дані в пам'яті і працює надзвичайно швидко, оскільки немає вводу/виводу диска, що чекає. Але оскільки це рушій пам'яті, будь-які зміни зникнуть після перезапуску сервера. Heap — чудове місце для тестування BDB, адже це перший транзакційно захищений рушій зберігання даних MySQL. Побудований на базі даних Berkeley DB, він також є транзакційно безпечним, але BDB, очевидно, не такий популярний, як InnoDB, оскільки більшість рушіїв зберігання в MySQL, які підтримують транзакції, також шукають MVCC або рядкові блокувальні рушії, тоді як BDB підтримує лише блокування на рівні сторінки.

Двигун InnoDB

InnoDB — це транзакційний рушій зберігання, який підтримує відкат і розроблений для надання високопродуктивних сервісів при обробці великих обсягів даних, а також створює буферні пули в пам'яті під час виконання для буферизації даних і індексів.

Переваги двигуна InnoDB:

1. Підтримка обробки транзакцій та функцій транзакцій ACID;

2. Реалізовано чотири рівні ізоляції стандарту SQL;

3. Підтримка обмежень блокування на рівні рядків і зовнішніх ключів;

4. Ви можете використовувати журнали транзакцій для відновлення даних.

5. Рівень блокування — рядковий, що підходить для частої модифікації таблиці з високою паралелізацією, а висока конкурентність краща, ніж MyISAM. Недоліком є велике споживання системи.

6. Індекс не лише кешує себе, а й кешує дані, які потребують більше пам'яті, ніж MyISAM.

Недоліки двигуна InnoDB:

Оскільки вона не зберігає кількість рядків у таблиці, вся таблиця сканується за допомогою статистики COUNT.

Двигун MyISAM

MyISAM є рушієм за замовчуванням до MySQL 5.5.5 і розроблений для швидкого читання.

Переваги двигуна MyISAM:

1. Високопродуктивне читання;

2. Оскільки це зберігає кількість рядків у таблиці, вся таблиця не буде скануватися при використанні статистики COUNT;

Недоліки двигуна MyISAM:

1. Рівень замка — це столичний замок, і перевага годинникового замка в тому, що верхня частина невелика і замок швидкий; Недоліки полягають у великій деталізації замків, високій ймовірності імпульсу блокування та низькій пропускній здатності паралелізму, що підходить для сервісів на основі запитів.

2. Цей рушій не підтримує транзакції або зовнішні ключі.

3. Операції INSERT і UPDATE повинні блокувати всю таблицю;

4. Він зберігає кількість рядків у таблиці, тому при виборі COUNT(*) з таблиці потрібно лише безпосередньо прочитати збережені значення без сканування всієї таблиці.

Застосовні сценарії

MyISAM підходить для: (1) великої кількості розрахунків підрахунку; (2) Рідкісні вставки та дуже часті запити; (3) Бізнесу немає.

InnoDB підходить для: (1) високих вимог до надійності або транзакцій; (2) Оновлення таблиць і запити відбуваються досить часто, і ймовірність блокування таблиці досить висока.

Порівняння таблиць

ВластивостіMyISAMКупаBDBInnoDB
ТранзакціїНе підтримуєтьсяНе підтримуєтьсяУ резервуаріУ резервуарі
Гранулярність замкаЗамок столуЗамок столуБлокування сторінки (сторінка, 8 КБ)Шлюз
ЗберіганняРозділені файлиУ пам'ятіОдин файл на кожну таблицюТабличний простір
Рівень ізоляціїненеЧитайте «Віддана справа»Всі
Портативний форматбутиН/Днебути
Повнота цитуваннянененебути
Первинний ключ данихненебутибути
MySQL кешує записи данихнеТакТакТак
ЮзабілітіПовна версіяПовна версіяMySQL-MaxПовна версія


Деякі відмінності в деталях


1. InnoDB не підтримує індекси типу FULLTEXT, які підтримуються з MySQL 5.6 (експериментально).

2. InnoDB не зберігає конкретну кількість рядків таблиці, тобто при виконанні select count() з таблиці InnoDB має просканувати всю таблицю, щоб обчислити кількість рядків, а MyISAM достатньо лише прочитати кількість збережених рядків. Зверніть увагу, що коли оператор count() містить умову where, операція однакова для обох таблиць.

3. Для полів типу AUTO_INCREMENT InnoDB має містити індекс лише з цим полем, але в таблиці MyISAM можна створити спільний індекс з іншими полями.

4. Коли ВИДАЛИТИ З таблиці, InnoDB не створює таблицю заново, а видаляє її рядок за рядком.

5. Операція LOAD TABLE FROM MASTER не працює для InnoDB, рішення полягає в тому, щоб спочатку змінити таблицю InnoDB на таблицю MyISAM, імпортувати дані, а потім змінити їх у таблицю InnoDB, але це не застосовується до таблиці, яка використовує додаткові функції InnoDB (наприклад, зовнішні ключі).

6. Крім того, блокування рядка таблиці InnoDB не є абсолютною, якщо MySQL не може визначити діапазон для сканування під час виконання SQL-оператора, таблиця InnoDB також заблокує всю таблицю.

7. InnoDB не підтримує індексацію повного тексту, тоді як MyISAM підтримує. Повнотекстове індексування означає створення індексу кожного слова у зворотному порядку у вигляді символу, варчара та тексту (за винятком стоп-слів). Повнотекстовий індекс MyISAM насправді марний, оскільки він не підтримує сегментацію китайських слів і повинен бути внесений користувачем у таблицю даних після сегментації слів, а слова з менш ніж 4 китайськими ієрогліфами ігноруються як стоп-слова.





Попередній:Збирайте експериментальні питання
Наступний:SQL-оператор у тип Varchar
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com