Статьи

MySQL: плюсы и минусы таблиц MyISAM

MySQL MyISAM В отличие от большинства систем баз данных, MySQL предлагает несколько типов таблиц. Выбор правильного типа может иметь решающее значение для вашего веб-приложения, но лишь немногие разработчики осознают его последствия, пока не станет слишком поздно. В этой статье мы рассмотрим таблицы MyISAM.

MyISAM — это тип таблицы MySQL по умолчанию. Если вы никогда сознательно не указали тип, ваша таблица будет использовать механизм MyISAM. Есть несколько причин, почему это может быть преимуществом.

1. Простота
Таблицы MyISAM просты. Если вы новичок в MySQL или базах данных в целом, я бы порекомендовал вам начать с таблиц MyISAM.

В следующем примере мы создадим новую базу данных и таблицу из командной строки mysql>. (У вас установлен MySQL, верно? Если нет, посмотрите как установить MySQL .)


CREATE DATABASE mysqltest;
USE mysqltest;

CREATE TABLE mysqltest.articles (
id int UNSIGNED NOT NULL AUTO_INCREMENT,
title TEXT NOT NULL,
body MEDIUMTEXT,
PRIMARY KEY (id))
ENGINE = MyISAM;

Это создаст новую базу данных, mysqltest и новую таблицу с именем article с столбцами id (автоматически генерируемое число), заголовком и телом. Определение наилучшего типа данных столбца настолько сложно, насколько это возможно.

2. Скорость
MySQL быстр. Действительно быстро. В обычных условиях тесты показывают, что таблицы MyISAM превосходят все остальные базы данных общего назначения и используют меньше системных ресурсов.

3. Полнотекстовый поиск
Рассмотрим нашу таблицу выше. Что если нам нужно искать ключевые слова в заголовке и в теле? Простое решение — добавить полнотекстовый индекс:

 
ALTER TABLE mysqltest.articles ADD FULLTEXT alltext (title, body);

Теперь мы можем найти все статьи со словами «база данных» и / или «статья», используя:

 
SELECT * FROM mysqltest.articles
WHERE MATCH(title, body) AGAINST ('database article');

Мы можем даже заказать статьи по наиболее релевантным первым, чтобы создать простую поисковую систему:

 
SELECT *, MATCH(title, body) AGAINST ('database article') AS rel
FROM mysqltest.articles
ORDER BY rel DESC;

Недостатки таблиц MyISAM

Есть несколько ситуаций, когда MyISAM может не подходить.

1. Плохая целостность данных
Таблицы MyISAM не поддерживают транзакции или ограничения внешнего ключа.

Рассмотрим банковское приложение, в которое вы переводите деньги. Обычно это включает два оператора SQL UPDATE; дебет с одного счета и кредит на другой. Если MySQL или сервер вышел из строя в неправильный момент, вы можете получить деньги на обоих счетах или ни на одном.

2. Плохое восстановление после сбоя
MySQL надежен, но таблицы MyISAM могут быть повреждены после сбоя. Проблема обычно может быть исправлена ​​с помощью REPAIR TABLE, но это дополнительные административные издержки.

3. Блокировка стола
MyISAM использует блокировку на уровне таблицы. Когда строка вставляется или обновляется, все другие изменения в этой таблице задерживаются до тех пор, пока этот запрос не будет выполнен.

Не всегда легко доказать, вызовет ли это проблемы для вашего веб-приложения, но в целом, если вы выполняете больше операций вставки / обновления, чем выбирает, MyISAM может быть не лучшим выбором для таблицы.

Вы должны использовать MyISAM?

MyISAM является идеальным выбором, если вы новичок в MySQL, ваше веб-приложение простое, должно быть быстрым или использовать полнотекстовый поиск. Однако его не следует использовать, когда целостность данных является приоритетом. Возможные приложения могут включать системы управления контентом, инструменты онлайн-закладок, программы для чтения RSS или простые поисковые системы.

Обратите внимание, что вы можете смешивать типы таблиц в одной базе данных. На практике это может вызвать меньше путаницы у разработчиков, если вы придерживаетесь одного типа таблицы.

Смотрите также: