2012-11-16 3 views
3

Недавно в одном из наших обсуждений было показано, что перемещение старой устаревшей системы с использованием старого развертывания MySQL на основе MyISAM не может быть легко заменено развертыванием MySQL или MariaDB на базе InnoDB. Причина в том, что было слишком много MyISAM только команд SQL по всему месту. Я еще не видел код, поэтому мне интересно, какие команды SQL они ссылаются.Наиболее распространенные и важные команды SQL, которые применимы только к механизму хранения MyIsam?

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

LOCK TABLES 
UNLOCK TABLES 

Если вас интересует больше, или укажите его в коллекцию. Он будет высоко оценен.

--edit--

Я положу все остальное я нахожу ниже этой линии.

MATCH (http://dev.mysql.com/doc/refman/5.5/en//fulltext-search.html) 

ответ

1

Вы можете LOCK TABLES для таблицы InnoDB тоже, так что это не MyISAM конкретного. Хотя нет необходимости блокировать таблицы InnoDB. Предпочтительно использовать транзакции, MVCC и SELECT...FOR UPDATE.

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

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

CREATE TABLE foo (
    group_id INT, 
    position INT AUTO_INCREMENT, 
    PRIMARY KEY (group_id, position) 
); 

Приведенная выше таблица с шагом position при вставке строк, но начинается снова на 1 для каждого отдельного значения group_id. Это работает только в MyISAM.

CREATE FULLTEXT INDEX, и поэтому предикат запроса MATCH()...AGAINST() в настоящее время поддерживается только в MyISAM. Но они внедряются для InnoDB в MySQL 5.6.

CREATE SPATIAL INDEX поддерживается только в MyISAM.

CHECKSUM TABLE относится только к таблицам MyISAM.

OPTIMIZE TABLE в некотором роде специфичен для MyISAM, но когда вы запускаете эту команду против таблицы InnoDB, она автоматически переводится на операцию rereate + analysis.

CREATE TABLE варианты, которые поддерживаются только MyISAM:

  • AVG_ROW_LENGTH = NNN
  • DATA_DIRECTORY = путь
  • INDEX_DIRECTORY = путь
  • DELAY_KEY_WRITE = 1
  • PACK_KEYS = 1
  • ROW_FORMAT = ФИКСИРОВАННЫЙ

Механизм хранения MERGE может объединять только таблицы MyISAM.

Моей любимой командой для применения к таблице MyISAM является следующее. :-)

ALTER TABLE tablename ENGINE=InnoDB; 
+0

Вы получите правильный ответ для своей любимой команды. ;) –

0

Я предпочитаю создать «временную» таблицу, вставки/обновление и удаление, удалить старую таблицу и чем переименовать новую таблицу со старым именем.

иначе вы можете в последнем шаге

TRUNCATE TABLE x; 
INSERT INTO x SELECT * from temp_x; 
+0

Вы говорите о стратегии миграции. Я говорю о том, какие команды SQL специфичны для MySQL + MyISAM. –

 Смежные вопросы

  • Нет связанных вопросов^_^