3

最近、古い MyISAM ベースの MySQL デプロイメントを使用して古いレガシー システムを移行することは、InnoDB ベースの MySQL または MariaDB デプロイメントに簡単に置き換えることができないという議論が持ち上がりました。思いついた理由は、MyISAM だけの SQL コマンドがいたるところに多すぎたからです。コードをまだ見ていないので、どの SQL コマンドがどこを参照しているのか気になります。

テーブルのロックに関連する以下のような SEVERAL しか知りません。理論上はおそらく InnoDB でも動作しますが、テーブル ロックをサポートする MyISAM 、 MERGE、およびストレージ エンジンにより適しています。MEMORY

LOCK TABLES
UNLOCK TABLES

もっとある場合は、そのコレクションを教えてください。高く評価されます。

- 編集 -

見つけたものはすべてこの行の下に置きます。

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

2 に答える 2

1

InnoDB テーブルでもできるLOCK TABLESので、MyISAM 固有ではありません。InnoDB テーブルをロックする必要はありませんが。トランザクション、MVCC、およびSELECT...FOR UPDATE.

key_buffer_sizeキャッシュ インデックス専用のメモリなど、MyISAM にのみ関連する構成変数とステータス変数が多数あります。しかし、これらは命令ではありません。

MyISAM テーブルのいくつかの機能は、InnoDB ではサポートされていません。1 つはグループ化された自動インクリメント主キーです。

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 でのみサポートされています。しかし、これらは MySQL 5.6 の InnoDB に実装されています。

CREATE SPATIAL INDEXMyISAM でのみサポートされています。

CHECKSUM TABLEMyISAM テーブルにのみ適用されます。

OPTIMIZE TABLEいくつかの点で MyISAM に固有ですが、このコマンドを InnoDB テーブルに対して実行すると、再作成 + 分析操作に自動的に変換されます。

CREATE TABLEMyISAM でのみサポートされているオプション:

  • AVG_ROW_LENGTH=nnn
  • DATA_DIRECTORY=パス
  • INDEX_DIRECTORY=パス
  • DELAY_KEY_WRITE=1
  • パックキー=1
  • ROW_FORMAT=固定

MERGE ストレージ エンジンは MyISAM テーブルのみをマージできます。

MyISAM テーブルに適用する私のお気に入りのコマンドは次のとおりです。:-)

ALTER TABLE tablename ENGINE=InnoDB;
于 2012-11-19T16:30:27.727 に答える
0

「一時」テーブルを作成し、挿入/更新および削除し、古いテーブルを削除して、新しいテーブルの名前を古い名前に変更することを好みます。

それ以外の場合は、最後のステップでできます

TRUNCATE TABLE x;
INSERT INTO x SELECT * from temp_x;
于 2012-11-17T19:14:36.390 に答える