ALTER TABLEの順番

検証データ

約8万件

方法1

SennaのFULLTEXTインデックスを貼ってから通常のインデックスを生成する(×5回)

  • Sennaインデックス
Query OK, 77373 rows affected (10 min 5.51 sec)
  • 通常インデックス(×5回)
Query OK, 77373 rows affected (9 min 48.32 sec)
Query OK, 77373 rows affected (9 min 22.71 sec)
Query OK, 77373 rows affected (10 min 2.35 sec)
Query OK, 77373 rows affected (7 min 58.99 sec)
Query OK, 77373 rows affected (5 min 2.64 sec)
方法2

通常のインデックスを生成(×5回)からSennaのFULLTEXTインデックスを貼る

  • 通常インデックス(×5回)
Query OK, 77373 rows affected (2.33 sec)
Query OK, 77373 rows affected (2.92 sec)
Query OK, 77373 rows affected (3.48 sec)
Query OK, 77373 rows affected (4.23 sec)
Query OK, 77373 rows affected (4.29 sec)
  • Sennaインデックス
Query OK, 77373 rows affected (7 min 25.80 sec)


この差は一体!?


とりあえず判明したことはSennaのインデックスがある状態でALTER TABLEをするとやたらと時間がかかるってこと

ちなみにデータファイルのサイズ
  • 方法1の場合
   8462336 case1.001.SEN
 137269248 case1.001.SEN.i
 150867968 case1.001.SEN.i.c
   8462336 case1.001.SEN.l
  79756280 case1.MYD
   7233536 case1.MYI
      9546 case1.frm
  • 方法2の場合
   8462336 case2.001.SEN
 137269248 case2.001.SEN.i
 150867968 case2.001.SEN.i.c
   8462336 case2.001.SEN.l
  79756280 case2.MYD
   7233536 case2.MYI
      9546 case2.frm

あれれ?サイズは一緒だ・・・・

う〜む・・・ですな

結論

Sennaのインデックスをつける場合は他のALTER TABLEやINSERTなどをしたあとで、最後にSennaのインデックスを貼ると効率がいい