Разница, скорее всего, обусловлена конфигурацией innoDB, которая требует немного более тонкой настройки, чем myISAM. Идея innoDB заключается в том, чтобы хранить большую часть ваших данных в памяти и выполнять очистку/чтение на диск только тогда, когда у вас есть несколько запасных циклов процессора.
Если вы даже беспокоитесь о InnoDB, это действительно хороший вопрос. Если вы собираетесь использовать MySQL, настоятельно рекомендуется получить некоторый опыт работы с InnoDB. Но если вы делаете быстро-грязную работу для базы данных, которая не увидит много трафика и не беспокоится о масштабах, то легкость MyISAM может быть просто победой для вас. InnoDB может быть чрезмерным во многих случаях, когда кому-то просто нужна простая база данных.
, но многие из моих таблиц не будет обновляться
Вы все еще можете получить подъем производительности от InnoDB, если вы делаете 99% чтение. Если вы настроите свой размер пула буферов для хранения всей своей базы данных в памяти, InnoDB НИКОГДА не придется идти на диск, чтобы получать ваши данные, даже если он пропускает кеш запросов mysql. В MyISAM есть хорошая возможность прочитать строку с диска, и вы покидаете операционную систему, чтобы выполнять кеширование и оптимизацию для вас.
InnoDB-буфер бассейн размер
Моя первая догадка проверить innodb_buffer_pool_size каких кораблей из коробки, установленной на 8Й. Рекомендуется, чтобы это составляло около 80% общей памяти. После того, как вы нажмете этот предел, производительность InnoDB будет значительно снижаться, потому что он должен очистить что-то из буфера, чтобы освободить место для новых данных, которые могут быть дорогими
автокоммит = 0
Кроме того, убедитесь автокоммит выключен, когда вы загружаете свой стол, или промывка произойдет на каждой вставке. Вы можете включить его после завершения, и это настройка на стороне клиента. очень безопасно.
Загрузка таблицы обычно случается раз
Подумайте о том, что если вы действительно хотите, чтобы настроить вашу базу данных для размещения «вставки 17million строк». Как часто вы это делаете? В этом случае MyISAM может быть более быстрым, но когда у вас есть 100 одновременных подключений, все чтение и изменение этой таблицы в одно и то же время, вы найдете хорошо настроенный innoDB, который победит, и MyISAM задохнется от блокировок таблиц.
Как MyISAM видит эту операцию
MyISAM будет очень хорошо это без какой-либо настройки, потому что под одеялом, вы просто добавляя каждую строку в файл (и обновление индекса). Ваша ОС и кэширование дисков будут обрабатывать все эти проблемы с производительностью.
Как InnoDB видит эту операцию
Innodb будет знать таблицу нуждается в записи, поэтому он бросает строку в буфер вставки. Вы не даете ему времени до следующей вставки, поэтому у innoDB нет времени на работу с буфером, он заканчивается из комнаты и вынужден «удерживать» вставку, когда он записывает в пул буферов и обновляет индексы. Затем ваш буферный пул заполняется, и innoDB вынужден «задержать» вставку и вывести некоторую страницу из пула буферов на диск. И вы продолжаете бросать в нее вставки, как сумасшедшие. Обратите внимание, что когда вы настроите InnoDB, чтобы дать вам подсказку MySQL> очень быстро после этого, InnoDB все равно будет скремблироваться под обложками, чтобы догнать его в свободное время, но будет готов выполнить новую транзакцию для вас.
ПРОЧИТАТЬ:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html (см сыпучие Советы по загрузке данных)
Я использую только InnoDB, когда я работаю с реляционными таблицами. В противном случае, если у вас нет внешних ключей, MyISAM - это то, что я предпочитаю! –
просто указать, есть индекс для обеих таблиц. «главная» таблица в настоящее время является myisam. – nick
ben, я бы хотел использовать реляционные таблицы, но я буду иметь дело с возможными сотнями миллионов строк - мне также нужно индексировать десятки столбцов, поэтому я не знаю, в каком направлении идти. целостность не является большой проблемой. не для этой части, по крайней мере. – nick