teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/04/08 07:01

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -7,6 +7,7 @@
7
7
  ピンポイントな内容は探しきれていませんが以下のような記述を見つけました。
8
8
  [13.1.7 ALTER TABLE 構文](https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html)
9
9
 
10
+ > MyISAM テーブルに対して ALTER TABLE を使用した場合、一意でないインデックスはすべて (REPAIR TABLE として) 別のバッチに作成されます。多くのインデックスがあるときは、この方法で ALTER TABLE がはるかに早くなります。
10
11
  > MyISAM テーブルの場合は、キーの更新を明示的に制御できます。ALTER TABLE ... DISABLE KEYS を使用して、一意でない**インデックスの更新を停止**するよう MySQL に指示します。次に、ALTER TABLE ... ENABLE KEYS を使用して、不足しているインデックスを再作成します。MyISAM はこれを、キーを 1 つずつ挿入するのに比べてはるかに高速な特殊なアルゴリズムで実行するため、一括挿入操作を実行する前にキーを無効にすると大幅な高速化が得られます。ALTER TABLE ... DISABLE KEYS を使用するには、先に説明した権限に加えて INDEX 権限が必要です。
11
12
  >
12
13
  > 一意でないインデックスは、無効になっている間、有効なときにはこのインデックスを使用する SELECT や EXPLAIN などのステートメントで無視されます。

1

追記

2021/04/08 07:01

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,4 +2,13 @@
2
2
 
3
3
  > カラム拡張すると、インデックスは更新されるんでしょうか?
4
4
 
5
- そもそも連動していないと不整合な状況になるので、拡張というか変更があれば更新されるはずです。
5
+ そもそも連動していないと不整合な状況になるので、拡張というか変更があれば更新されるはずです。
6
+
7
+ ピンポイントな内容は探しきれていませんが以下のような記述を見つけました。
8
+ [13.1.7 ALTER TABLE 構文](https://dev.mysql.com/doc/refman/5.6/ja/alter-table.html)
9
+
10
+ > MyISAM テーブルの場合は、キーの更新を明示的に制御できます。ALTER TABLE ... DISABLE KEYS を使用して、一意でない**インデックスの更新を停止**するよう MySQL に指示します。次に、ALTER TABLE ... ENABLE KEYS を使用して、不足しているインデックスを再作成します。MyISAM はこれを、キーを 1 つずつ挿入するのに比べてはるかに高速な特殊なアルゴリズムで実行するため、一括挿入操作を実行する前にキーを無効にすると大幅な高速化が得られます。ALTER TABLE ... DISABLE KEYS を使用するには、先に説明した権限に加えて INDEX 権限が必要です。
11
+ >
12
+ > 一意でないインデックスは、無効になっている間、有効なときにはこのインデックスを使用する SELECT や EXPLAIN などのステートメントで無視されます。
13
+
14
+ 更新を停止させることが出来るというのは、逆説的には更新されているという事だと思います。