Типы MySQL таблиц
1594 сообщения
#15 лет назад
Вопрос к профессионалом и людям, которые активно используют различные типы MySQL-таблиц.Я раньше как то не задумываясь писал TYPE=MyISAM.
А вот сейчас подумал правильно ли я поступал =) Вдруг в каких то случаях предпочтительнее использовать InnoDB?
HEAP, как я понял, удачно использовать для временных таблиц, т.к они хранятся в оперативной памяти. Про другие типы не говорю - они практически не используются.
А вот выбор между ISAM, MyISAM и InnoDB очень заинтересовал. В частности, хочется знать:
1. При каких объёмах данны желательно использовать тот или иной тип
2. Скорость работы с INSERT и SELECT запросами
3. Отличается ли синтаксис при работе (Понимаю, что синтаксис не отличается, но некоторые команды могут оказывать разное действие на таблицу)
4. Чем сами пользуетесь?
Подскажите кто чем может =)
16382 сообщения
#15 лет назад
Уж извините, конечно, но по этому вопросу можно просто погуглить. 
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"):видимо, мы про разные сайты говорим
Не могу представить себе сайт, где запросов на вставку-обновление будет хотя бы столько же, сколько запросов на выборку.
248 сообщений
#15 лет назад
Распишу плюсы:InnoDB — это транзакции и внешние ключи, блокировка отдельных записей.
MyISAM — быстрее работают, меньше тратится дискового места, памяти при обновлении.
626 сообщений
#15 лет назад
Только учтите что чудес не бывает и пока ВЫ САМИ не начнете использовать транзакции никаких плюсов от наличия их поддержки на уровне движка БД для ВАС не будет.
1594 сообщения
#15 лет назад
Кстати, тогда такой вопрос:Допустим, реализуется механизм перевода денег со счета одного пользователя weblancer на другой (чтобы за примером далеко не ходить)
Понятно, что должно выполняться два запроса "UPDATE ..." и понятно, что по-любому должны использоваться транзакции. Но в принципе, нигде больше на сайте транзакции не нужны.
Возникает вопрос, что лучше: Создать для юзеров и всего остального 2 разных таблицы и одной выставить InnoDB, а другой MyISAM, либо создать одну, но InnoDB?
==upd==
Глупость сморозил. Таблицы то по любому разные будут.
Но все равно: имеет ли разницу, если в одной БД используются таблицы разных типов? Не влияет ли это на целостность и безопасность БД в целом?
3240 сообщений
#15 лет назад
Цитата ("frig"):Не могу представить себе сайт, где запросов на вставку-обновление будет хотя бы столько же, сколько запросов на выборку.
Вообще такие системы не редкость.
Например, логгеры. Запросов на вставку значительно больше, чем на выборку.
И даже в повседневных примитивных задачах это возможно. Например если взять голосовалку, то оптимально было бы сделать ее так, чтобы пользователям каждый раз показывался не результат повторной выборки, а содержимое кеша, в то время как информация обо всех новых голосованиях будут добавляться в базу данных (с сопутствующим обновлением содержимого кеша без повторной выборки).
16382 сообщения
#15 лет назад
Цитата ("tvv"):Вообще такие системы не редкость.
Да это понятно. И в пределах собственно веб сайтов это тоже есть, но преимущественно - выборка. Я именно о веб сайтах говорил, так как в остальных случаях без труда представляю
