大量のデータを移行するときはあとでインデックスをつけるものだ
基本的な考え方はその通り。ただし、提示の条件の場合以下の特有の条件がつく。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.5.12 テーブルとインデックスの構造
すべての InnoDB テーブルには、クラスタードインデックスと呼ばれる、レコードのデータを格納する特別なインデックスがあります。テーブルで PRIMARY KEY を定義すると、主キーのインデックスがクラスタードインデックスになります。
テーブルに主キーを定義しない場合は、InnoDB によって内部的にクラスタードインデックスが作成され、そこで InnoDB がテーブル内のレコードに割り当てるロー ID の順にレコードが並べられます。
つまり、主キー無しで作成しても内部的にはそれと同等の物が作成される。
結果質問の条件では主キー相当のインデックスが2重に作成されることになり、PRIMARY KEY を後で追加した方が余分にコストがかかってしまうと思われる。
これは InnoDB 特有の現象なのでRDBMSの一般的な現象というわけではない。
データがすでにソートされたデータであった場合、インデックスが着いていても、ロードは早くなります。
なるほど。ありがとうございます。
元データがソートがなされていないとき、OSのコマンドで並べ替える必要があるため、結果は一概には言えなさそうですね。あした会社で検証してみます。
大量のデータを移行するときはあとでインデックスをつけるものだ
基本的な考え方はその通り。ただし、提示の条件の場合以下の特有の条件がつく。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.5.12 テーブルとインデックスの構造
すべての InnoDB テーブルには、クラスタードインデックスと呼ばれる、レコードのデータを格納する特別なインデックスがあります。テーブルで PRIMARY KEY を定義すると、主キーのインデックスがクラスタードインデックスになります。
テーブルに主キーを定義しない場合は、InnoDB によって内部的にクラスタードインデックスが作成され、そこで InnoDB がテーブル内のレコードに割り当てるロー ID の順にレコードが並べられます。
つまり、主キー無しで作成しても内部的にはそれと同等の物が作成される。
結果質問の条件では主キー相当のインデックスが2重に作成されることになり、PRIMARY KEY を後で追加した方が余分にコストがかかってしまうと思われる。
これは InnoDB 特有の現象なのでRDBMSの一般的な現象というわけではない。
なるほど。ありがとうございます。
たしかに後からインデックスをつけたほうが総要領は大きくなるようでした。
なるほど。ありがとうございます。
たしかに後からインデックスをつけたほうが総要領は大きくなるようでした。