myisam или innodb что быстрее

Самыми популярными на сегодня являются MyISAM и InnoDB.

MyISAM интересен тем, что дает просто безумную скорость на select-ах и insert-ах. С другой стороны, он не поддерживает транзакционность и блокировку на уровне строк, что в свою очередь приводит к страшным тормозам при использовании delete\update. Проще говоря, на таблицу допускается только одна одновременная delete или update операция, и остальные вынуждены ждать завершения текущей операции, что на больших объемах данных приводит к серьезным проблемам.

К преимуществам движка можно отнести поддержку полнотекстовый поиск, компрессию и GIS функции. Под хранение каждой таблицы отводятся два файла – имя_таблицы.MYD ( данные ) и имя_таблицы.MYI ( индексы ). Формат данных платформенно независимый, что позволяет переносить данные с сервера на сервер простым копированием таблиц – это еще один плюс.

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

Кроме транзакционности, к преимуществам этого движка можно отнести row-level блокировки, правда тут стоит учесть тот факт, что table-level блокировки тоже имеют место быть, например при использовании автоинкрементных полей. С этим борятся и время от времени выходят фиксы, уменьшающие количество table-level блокировок, но никто не отменял регулярный просмотр логов на предмет проблем с блокировками.

Таблицы по умолчанию хранятся в одном innodb файле, но при желании их можно разместить в разных файлах, причем по одному на таблицу, если указать это явно.

Что может повлиять на выбор тиха хранения данных? Ну во-первых необходимость транзакционности, ибо если пишется серьезный финансовый софт, например тот же биллинг или процессинг, то тут майсам использовать никак нельзя.

Кроме того, специфика работы с данными, накладывает свой отпечаток на выбор движка. Если речь идет о какой-то статистике, которую все просто напросто просматривают, то лучше майсам с этим никто не справится.

Про конкурентность забывать тоже не стоит. Если работа с данными идет всего в несколько потоков, то это вполне может нивелировать недостатки myisam в плане update\delete в пользу быстрых select.

При выборе движка есть еще ряд нюансов, которые не так важны как главные критерии, но которые тоже стоит учитывать.

Источник

Каковы основные различия между InnoDB и MyISAM?

Каковы основные различия между InnoDB и MyISAM?

Первое существенное отличие, которое я вижу, заключается в том, что InnoDB реализует блокировку на уровне строк, в то время как MyISAM может выполнять только блокировку на уровне таблиц. Вы найдете лучшее восстановление после сбоев в InnoDB. Тем не менее, он не имеет FULLTEXT поисковых индексов до v5.6, как и MyISAM. InnoDB также реализует транзакции, внешние ключи и ограничения отношений, в то время как MyISAM этого не делает.

Список может пойти немного дальше. Тем не менее, они оба имеют свои уникальные преимущества в их пользу и недостатки друг против друга. Каждый из них более подходит в некоторых сценариях, чем другой.

Итак, подведем итог ( TL; DR ):

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

MYISAM

Это даст Рекомендуемую настройку для MyISAM Key Cache ( key_buffer_size ) с учетом вашего текущего набора данных ( запрос ограничит рекомендацию 4G (4096M). Для 32-битной ОС ограничение 4GB. Для 64-бит 8GB.

InnoDB

Основным используемым механизмом является буферный пул InnoDB. Он кэширует данные и индексные страницы из таблиц InnoDB, к которым осуществляется доступ. Чтобы определить размер пула буферов InnoDB, выполните следующий запрос:

Это даст рекомендуемый параметр для размера пула буферов InnoDB ( innodb_buffer_pool_size ) с учетом вашего текущего набора данных.

ПРЕДОСТЕРЕЖЕНИЕ

В конце обоих запросов есть встроенный запрос (SELECT 2 PowerOf1024) B

Эпилог

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

Помните, что на что бы вы ни выделяли, оставьте достаточно оперативной памяти для подключений к БД и операционной системы.

MyISAM имеет блокировку на уровне таблицы, но не блокировку на уровне строки. Нет транзакций. Нет автоматического восстановления после сбоя, но он предлагает функциональность таблицы восстановления. Нет ограничений по внешнему ключу. Таблицы MyISAM обычно более компактны по размеру на диске по сравнению с таблицами InnoDB. Таблицы MyISAM могут быть значительно уменьшены в размерах путем сжатия с помощью myisampack, если это необходимо, но становятся доступными только для чтения. MyISAM хранит индексы в одном файле и данные в другом. MyISAM использует ключевые буферы для кэширования индексов и оставляет управление кэшированием данных операционной системе.

Еще одна вещь: вы можете сделать резервную копию таблиц InnoDB, просто сделав снимок файловой системы. Резервное копирование MyISAM требует использования mysqldump и не обязательно будет согласованным (например, если вы вставляете в родительскую и дочернюю таблицу, вы можете найти только строку дочерней таблицы в вашей резервной копии).

(Мой личный опыт: 2-терабайтная БД в MyISAM).

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

Ссылочная целостность

Ссылочная целостность гарантирует, что отношения между таблицами остаются согласованными. Более конкретно, это означает, что когда таблица (например, листинги) имеет внешний ключ (например, идентификатор продукта), указывающий на другую таблицу (например, продукты), когда обновления или удаления происходят в указанной таблице, эти изменения каскадно связаны со связыванием Таблица. В нашем примере, если продукт переименован, внешние ключи таблицы связывания также обновятся; если продукт удален из таблицы «Продукты», любые списки, которые указывают на удаленную запись, также будут удалены. Кроме того, любой новый листинг должен иметь этот внешний ключ, указывающий на действующую существующую запись.

Транзакции и атомарность

Управление данными в таблице осуществляется с помощью операторов языка манипулирования данными (DML), таких как SELECT, INSERT, UPDATE и DELETE. Группа транзакций объединяет два или более операторов DML в одну единицу работы, поэтому применяется либо весь блок, либо ни один из них.

MyISAM не поддерживает транзакции, тогда как InnoDB поддерживает.

Если операция прерывается во время использования таблицы MyISAM, операция немедленно прерывается, и затрагиваемые строки (или даже данные в каждой строке) остаются затронутыми, даже если операция не была завершена.

Если операция прервана во время использования таблицы InnoDB, так как она использует транзакции, которые имеют атомарность, любая транзакция, которая не была завершена, не вступит в силу, так как никакая фиксация не выполняется.

Блокировка стола против блокировки ряда

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

Когда запрос выполняется к таблице InnoDB, блокируются только соответствующие строки, остальная часть таблицы остается доступной для операций CRUD. Это означает, что запросы могут выполняться одновременно для одной и той же таблицы, если они не используют одну и ту же строку.

Транзакции и откаты

надежность

InnoDB, с другой стороны, использует журнал транзакций, буфер двойной записи и автоматическое контрольное суммирование и проверку для предотвращения повреждения. Прежде чем InnoDB вносит какие-либо изменения, он записывает данные перед транзакциями в системный файл табличного пространства с именем ibdata1. Если происходит сбой, InnoDB будет автоматически восстанавливать через воспроизведение этих журналов.

ПОЛНАЯ ТЕКСТОВАЯ индексация

InnoDB не поддерживает индексацию FULLTEXT до версии MySQL 5.6.4. На момент написания этого поста версия MySQL многих провайдеров виртуального хостинга по-прежнему была ниже 5.6.4, что означает, что индексирование FULLTEXT не поддерживается для таблиц InnoDB.

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

Заключение

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

По моему опыту, наиболее существенным отличием является способ блокировки каждого двигателя. InnoDB использует блокировку строк, в то время как MyISAM использует блокировку таблиц. Как правило, я использую InnoDB для записи тяжелых таблиц и MyISAM для чтения тяжелых таблиц.

Другие важные различия включают в себя:

Я склонен рассматривать MyISAM в качестве таблицы по умолчанию для MySQL, поэтому я укажу на различия для большинства пользователей InnoDB

MYISAM

MYISAM обеспечивает блокировку на уровне таблицы, поиск FULLTEXT. MYISAM имеет самый гибкий столбец AUTO_INCREMENTED, обрабатывающий все механизмы хранения. MYISAM не поддерживает транзакции.

INNODB

Включает изменения MySQL 5.6

ДВИГАТЕЛЬ ХРАНЕНИЯ INNODB:

Таким образом, нет смысла использовать MyISAM Engine, если вы уже обновлены до 5.6, если нет, то не ждите обновления до MySQL 5.6.

MyISAM

InnoDB

вилки

MariaDB имеет механизм хранения под названием Aria, который описывается как «безопасная альтернатива MyISAM». MariaDB и Percona Server по умолчанию используют форк InnoDB, называемый XtraDB. XtraDB поддерживается Percona. Изменения Oracle InnoDB регулярно импортируются в XtraDB, а также добавляются некоторые исправления ошибок и дополнительные функции.

Источник

Что быстрее, InnoDB или MyISAM?

Как MyISAM может быть «быстрее», чем InnoDB, если

4 ответа

Единственный способ, которым MyISAM может быть быстрее, чем InnoDB будет под этим уникальным обстоятельством

MyISAM

Я писал об этом в своих предыдущих сообщениях

InnoDB


СРАВНЕНИЕ

Поскольку и InnoDB, и MyISAM делают дисковые операции ввода-вывода, какие случайные факторы определяют, кто быстрее?

Таким образом, в среде с интенсивным чтением таблица MyISAM с фиксированным форматом строк превосходит InnoDB, считывает из пула буферов InnoDB, если в журналах отмены, содержащихся в ibdata1, содержится достаточно данных для поддержки транзакционное поведение, наложенное на данные InnoDB.

Заключение

В простом мире MyISAM быстрее читает, InnoDB работает быстрее для записи.

Как только вы начнете вводить смешанные операции чтения /записи, InnoDB будет быстрее и для чтения, благодаря механизму блокировки Row.

Я написал сравнение MySQL-хранилищах несколько лет назад, что по-прежнему относится к этому день, изложив уникальные различия между MyISAM и InnoDB.

По моему опыту, вы должны использовать InnoDB для всего, кроме таблиц кеша чтения, где потери данных из-за коррупции не так критичны.

Чтобы добавить ответы, касающиеся механических различий между двумя двигателями, я представляю эмпирическое сравнение скорости.

С точки зрения чистой скорости, это не всегда так, что MyISAM быстрее, чем InnoDB, но по моему опыту он, как правило, быстрее работает в рабочих средах PURE READ примерно в 2,0-2,5 раза. Очевидно, что это не подходит для всех сред, как это написано другими, MyISAM не хватает таких операций, как транзакции и внешние ключи.

Во-первых, я создал три таблицы, используя следующий SQL

с «MyISAM», замененным «InnoDB» и «памятью» во второй и третьей таблицах.

1) Vanilla выбирает

Запрос: SELECT * FROM tbl WHERE index_col = xx

Результат: draw

Скорость этих операций в целом одинакова и, как ожидается, является линейной по количеству выбранных столбцов. InnoDB кажется слегка быстрее, чем MyISAM, но это действительно маргинально.

2) Подсчет

Запрос: SELECT count (*) FROM tbl

Результат: Победители MyISAM

3) Условные выбирает

Запрос: SELECT * FROM tbl WHERE value1

Результат: Победители MyISAM

Здесь MyISAM и память работают примерно одинаково, и бить InnoDB примерно на 50% для больших таблиц. Это тип запроса, для которого преимущества MyISAM, по-видимому, максимизируются.

4) Подвыбор

Результат: Победители InnoDB

, где еще раз «MyISAM» заменяется на «InnoDB» во второй таблице.

В этом запросе я оставляю размер таблицы выбора 1000000 и вместо этого изменяю размер выбранных столбцов.

Здесь InnoDB легко побеждает. После того, как мы доберемся до разумной таблицы размеров, оба двигателя линейно масштабируются с размером подвыборки. Индекс ускоряетMyISAM, но интересно мало влияет на скорость InnoDB. subSelect.png

Что быстрее? Либо может быть быстрее. YMMV.

Источник

MySQL: отличия между MyISAM и InnoDB

Отличия между системами хранения данных MyISAM и InnoDB простым языком. В данной таблице я попробовал показать разницу между MyISAM и InnoDB на простых примерах.

Самые популярные типы хранение в базе MySQL – это MyISAM и InnoDB.

myisam или innodb что быстрее. Смотреть фото myisam или innodb что быстрее. Смотреть картинку myisam или innodb что быстрее. Картинка про myisam или innodb что быстрее. Фото myisam или innodb что быстрее

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

MyISAM

Интересен тем, что дает просто безумную скорость на select-ах и insert-ах. С другой стороны, он не поддерживает транзакционность и блокировку на уровне строк, что в свою очередь приводит к страшным тормозам при использовании deleteupdate. Проще говоря, на таблицу допускается только одна одновременная delete или update операция, и остальные вынуждены ждать завершения текущей операции, что на больших объемах данных приводит к серьезным проблемам.

К преимуществам движка можно отнести поддержку полнотекстовый поиск, компрессию и GIS функции. Под хранение каждой таблицы отводятся два файла – имя_таблицы.MYD ( данные ) и имя_таблицы.MYI ( индексы ). Формат данных платформенно независимый, что позволяет переносить данные с сервера на сервер простым копированием таблиц – это еще один плюс.

InnoDB

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

Кроме транзакционности, к преимуществам этого движка можно отнести row-level блокировки, правда тут стоит учесть тот факт, что table-level блокировки тоже имеют место быть, например при использовании автоинкрементных полей. С этим борятся и время от времени выходят фиксы, уменьшающие количество table-level блокировок, но никто не отменял регулярный просмотр логов на предмет проблем с блокировками.

Таблицы по умолчанию хранятся в одном innodb файле, но при желании их можно разместить в разных файлах, причем по одному на таблицу, если указать это явно.

Что может повлиять на выбор тиха хранения данных? Ну во-первых необходимость транзакционности, ибо если пишется серьезный финансовый софт, например тот же биллинг или процессинг, то тут майсам использовать никак нельзя.

Кроме того, специфика работы с данными, накладывает свой отпечаток на выбор движка. Если речь идет о какой-то статистике, которую все просто напросто просматривают, то лучше майсам с этим никто не справится.

Про конкурентность забывать тоже не стоит. Если работа с данными идет всего в несколько потоков, то это вполне может нивелировать недостатки myisam в плане updatedelete в пользу быстрых select.

При выборе движка есть еще ряд нюансов, которые не так важны как главные критерии, но которые тоже стоит учитывать.

Выводы:

Источник

Что лучше: InnoDB или MyISAM?

myisam или innodb что быстрее. Смотреть фото myisam или innodb что быстрее. Смотреть картинку myisam или innodb что быстрее. Картинка про myisam или innodb что быстрее. Фото myisam или innodb что быстрее

Любой программист, использующий в своей работе MySQL, хоть раз в жизни задавался вопросом: какой движок использовать для таблиц? InnoDB или MyISAM? Разумеется, сейчас есть масса других движков, но в данной статье я рассмотрю самые распространенные и устоявшиеся.

Рассмотрим наши любимые движки по их основным отличительным функциональным особенностям. Основные функции для сравнения я поместил в таблице:

ФункцияMyISAMInnoDB
Высокая скорость при чтении+
Транзакционность+
Полнотекстовый поиск+5.6+
Внешние ключи+

MyISAM оптимизирован для таблиц, к которым активно обращаются на чтение и практически не обращаются на запись.

Если вам требуется транзакционность, используйте InnoDB, ведь он изначально проектировался с учетом поддержки транзакций. MyISAM напротив, не поддерживает транзакции.

Возможность полнотекстового поиска сейчас есть у обоих движков, но следует учитывать, что у MyISAM она была всегда, а у InnoDB появилась начиная с версии MySQL 5.6.

InnoDB — движок для полноценных реляционных баз данных с внешними ключами. В MyISAM вы можете забыть о целостности и связности данных. То, что в MyISAM нельзя оперировать со связями, я считаю его основным минусом, склоняясь тем самым в сторону InnoDB.

Таким образом, упрощенный обзор ключевых характеристик заставляет сделать вывод о том, что лучше по умолчанию использовать движок InnoDB. Если он в процессе тестирования чем-то не устроит, или его функционал покажется избыточным, то всегда можно на начальных этапах провести сравнительный бенчмаркинг на ваших данных и SQL-запросах, и перейти на другой движок, который показал в вашей ситуации себя лучше.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *