Ответ 1
То, что сразу же появляется у меня, - MyISAM.
АСПЕКТ # 1: САЙТ
Всякий раз, когда есть соединения с MyISAM и InnoDB, таблицы InnoDB будут иметь поведение блокировки на уровне таблицы вместо блокировки на уровне строк из-за участия MyISAM в запросе и MVCC не может применяться к данным MyISAM. MVCC не может быть применен к InnoDB в некоторых случаях.
ASPECT # 2: участие MyISAM
С другой стороны, если какие-либо таблицы MyISAM обновляются через INSERT, UPDATE или DELETE, таблицы MyISAM, участвующие в запросе JOIN, будут заблокированы из других соединений DB, а запрос JOIN должен ждать, пока таблицы MyISAM могут быть читать. К сожалению, если в запросе JOIN есть сочетание InnoDB и MyISAM, таблицы InnoDB должны будут испытывать прерывистую блокировку, такую как ее партнеры MyISAM в запросе JOIN, из-за того, что их удерживают от записи.
ASPECT # 3: Оптимизатор запросов
MySQL полагается на мощность индекса для определения оптимизированного плана EXPLAIN. Индексность стабильна в таблицах MyISAM до тех пор, пока в таблицу не поступит много INSERT, UPDATE и DELETE, с помощью которых вы можете периодически запускать OPTIMIZE TABLE
по таблицам MyISAM. Индексность InnoDB никогда не работает! Если вы запустите SHOW INDEXES FROM *innodbtable*;
, вы увидите изменение мощности индекса каждый раз, когда вы запустите эту команду. Это потому, что InnoDB будет делать погружения в индекс для оценки мощности. Даже если вы запустите OPTIMIZE TABLE
против таблицы InnoDB, это будет только дефрагментировать таблицу. OPTIMIZE TABLE
будет запускать ANALYZE TABLE
внутренне, чтобы генерировать статистику индекса по таблице. Это работает для MyISAM. InnoDB игнорирует его.
Мой совет для вас - изо всех сил и конвертировать все в InnoDB и соответственно оптимизировать свои настройки.
ОБНОВЛЕНИЕ 2012-12-18 15:56 EDT
Верьте или нет, есть еще открытый билет на подключение InnoDB/MyISAM во время SELECT FOR UPDATE. Если вы его прочитали, он суммирует разрешение следующим образом: НЕ ДЕЛАЙТЕ ЭТО!!!.