Никита К.
1594 сообщения
#15 лет назад
Вопрос к профессионалом и людям, которые активно используют различные типы MySQL-таблиц.
Я раньше как то не задумываясь писал TYPE=MyISAM.
А вот сейчас подумал правильно ли я поступал =) Вдруг в каких то случаях предпочтительнее использовать InnoDB?
HEAP, как я понял, удачно использовать для временных таблиц, т.к они хранятся в оперативной памяти. Про другие типы не говорю - они практически не используются.

А вот выбор между ISAM, MyISAM и InnoDB очень заинтересовал. В частности, хочется знать:
1. При каких объёмах данны желательно использовать тот или иной тип
2. Скорость работы с INSERT и SELECT запросами
3. Отличается ли синтаксис при работе (Понимаю, что синтаксис не отличается, но некоторые команды могут оказывать разное действие на таблицу)
4. Чем сами пользуетесь?

Подскажите кто чем может =)
Роман Беляев
16382 сообщения
#15 лет назад
Уж извините, конечно, но по этому вопросу можно просто погуглить. И все станет понятно. Что, для чего, в каких случаях.
Никита К.
1594 сообщения
#15 лет назад
frig, погуглил. Но не понял =)
Роман Беляев
16382 сообщения
#15 лет назад
Anexroid, чего не понял-то? MyISAM быстрый но не надежный, InnoDB с транзакциями, более надежный, но медленнее.
Никита К.
1594 сообщения
#15 лет назад
frig, то есть если к БД много подключений (10000 юзеров на сайте) и куча записей в БД (1000000) то лучше MyISAM с частыми бэкапами?
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("Anexroid"):
то лучше MyISAM с частыми бэкапами?

Миллион записей достаточно много. У меня на одной базе, где было чуть побольше миллиона записей были проблемы с индексами. Если дело дойдет до таких проектов, не думаю, что подобные вопросы останутся :-).
Да, там был MyISAM. Но все меняется. Думаю, что innodb востребован именно из-за транзакций. Будут нужны - на myisam не усидишь.
Сергей Ф.
83 сообщения
#15 лет назад
Цитата ("Anexroid"):
frig, то есть если к БД много подключений (10000 юзеров на сайте) и куча записей в БД (1000000) то лучше MyISAM с частыми бэкапами?

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

Добавлено:
Вам до таких нагрузок (как и 99,9% разработчиков, включая и меня) никогда не дойти. К моменту, когда возникнет необходимость разрабатыать хайлод проект, у Вас уже будет либо опыт и навыки, либо наймете кого-нибудь другого. В любом случае, таких вопросов возникать не будет
Евгений О.
263 сообщения
#15 лет назад
Кроме поддержки транзакций:

1. Таблицы MyISAM работают примерно на 15% быстрее чем InnoDB;

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

3. Таблицы InnoDB не поддерживают дополнительные режимы таблиц MyISAM, например на InnoDB не работает "INSERT DELAYED";

4. Таблицы MyISAM проще копировать, проще восстанавливать и проще чинить. Когда "ломается" БД на таблицах InnoDB восстановить ее обычно удается только с резервной копии.

5. При внеплановой перезагрузке сервера, таблицы MyISAM обычно оказываются "испорченными", автоматическое восстановление больших таблиц продолжается часами и это обычно нивелирует выигрыш по производительности п.1.

Для больших баз данных высокой пропускной способности при плотности потока обновлений близкой к некоторому порогу лучше применять таблицы innoDB.
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("filipchuk"):
Таблицы заказов, пользователей, новостей, статей и т.д, только в InnoDB


C блокировкой не вяжется. Пользователь, новость или заказ добавляется ой как не часто. А вот выборка, которая в вебе шпарит только так - влияет на скорость.
Сергей Ф.
83 сообщения
#15 лет назад
Цитата ("frig"):
Цитата ("filipchuk"):
Таблицы заказов, пользователей, новостей, статей и т.д, только в InnoDB


C блокировкой не вяжется. Пользователь, новость или заказ добавляется ой как не часто. А вот выборка, которая в вебе шпарит только так - влияет на скорость.

видимо, мы про разные сайты говорим
Николай М.
1895 сообщений
#15 лет назад
InnoDB является транзакционным движком, в принципе если вы не знаете значения этого слова и последвий его работы, то вам и MyISAM подойдет), во всяком случаи гугль поможет.
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("filipchuk"):
видимо, мы про разные сайты говорим


Не могу представить себе сайт, где запросов на вставку-обновление будет хотя бы столько же, сколько запросов на выборку.
Сергей Ф.
83 сообщения
#15 лет назад
Спорить не буду, ни мне, ни Вам оно ни к чему
Роман Беляев
16382 сообщения
#15 лет назад
filipchuk это плюсадин :-)
Фрилансер У.
248 сообщений
#15 лет назад
Распишу плюсы:
InnoDB — это транзакции и внешние ключи, блокировка отдельных записей.
MyISAM — быстрее работают, меньше тратится дискового места, памяти при обновлении.
Тут М.
626 сообщений
#15 лет назад
Только учтите что чудес не бывает и пока ВЫ САМИ не начнете использовать транзакции никаких плюсов от наличия их поддержки на уровне движка БД для ВАС не будет.
Никита К.
1594 сообщения
#15 лет назад
Кстати, тогда такой вопрос:
Допустим, реализуется механизм перевода денег со счета одного пользователя weblancer на другой (чтобы за примером далеко не ходить)
Понятно, что должно выполняться два запроса "UPDATE ..." и понятно, что по-любому должны использоваться транзакции. Но в принципе, нигде больше на сайте транзакции не нужны.
Возникает вопрос, что лучше: Создать для юзеров и всего остального 2 разных таблицы и одной выставить InnoDB, а другой MyISAM, либо создать одну, но InnoDB?

==upd==
Глупость сморозил. Таблицы то по любому разные будут.
Но все равно: имеет ли разницу, если в одной БД используются таблицы разных типов? Не влияет ли это на целостность и безопасность БД в целом?
Вадим Т.
3240 сообщений
#15 лет назад
Цитата ("frig"):
Не могу представить себе сайт, где запросов на вставку-обновление будет хотя бы столько же, сколько запросов на выборку.

Вообще такие системы не редкость.
Например, логгеры. Запросов на вставку значительно больше, чем на выборку.
И даже в повседневных примитивных задачах это возможно. Например если взять голосовалку, то оптимально было бы сделать ее так, чтобы пользователям каждый раз показывался не результат повторной выборки, а содержимое кеша, в то время как информация обо всех новых голосованиях будут добавляться в базу данных (с сопутствующим обновлением содержимого кеша без повторной выборки).
Роман Беляев
16382 сообщения
#15 лет назад
Цитата ("tvv"):
Вообще такие системы не редкость.


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