人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLへCSVファイルからデータを移行しようとしています(テーブルはInnoDBを使用)。insert文とload文ではload文を用いた方が早いとマニュアルにあり、試したところ実際その通りになりました。また、データを移行後にプライマリーキーをつけるか、プライマリーキーがすでについたテーブルにデータをロードするかを試したところ、プライマリーキー付きのテーブルへのロードの方が速いようでした。会社の古株の先輩が、大量のデータを移行するときはあとでインデックスをつけるものだ、と言っていたので、意外でした。さて、このインデックスの件について、マニュアルや実験例を探したのですが、見つかりませんでした。この件について知見をもたれているかたのご意見を伺いたく思います。

●質問者: javabenkyo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CSV innodb MySQL いるか インデックス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● QuestR2
●100ポイント

データがすでにソートされたデータであった場合、インデックスが着いていても、ロードは早くなります。

◎質問者からの返答

なるほど。ありがとうございます。

元データがソートがなされていないとき、OSのコマンドで並べ替える必要があるため、結果は一概には言えなさそうですね。あした会社で検証してみます。


2 ● b-wind
●100ポイント ベストアンサー

大量のデータを移行するときはあとでインデックスをつけるものだ

基本的な考え方はその通り。ただし、提示の条件の場合以下の特有の条件がつく。


MySQL :: MySQL 4.1 リファレンスマニュアル :: 7.5.12 テーブルとインデックスの構造

すべての InnoDB テーブルには、クラスタードインデックスと呼ばれる、レコードのデータを格納する特別なインデックスがあります。テーブルで PRIMARY KEY を定義すると、主キーのインデックスがクラスタードインデックスになります。

テーブルに主キーを定義しない場合は、InnoDB によって内部的にクラスタードインデックスが作成され、そこで InnoDB がテーブル内のレコードに割り当てるロー ID の順にレコードが並べられます。

つまり、主キー無しで作成しても内部的にはそれと同等の物が作成される。


結果質問の条件では主キー相当のインデックスが2重に作成されることになり、PRIMARY KEY を後で追加した方が余分にコストがかかってしまうと思われる。

これは InnoDB 特有の現象なのでRDBMSの一般的な現象というわけではない。

◎質問者からの返答

なるほど。ありがとうございます。

たしかに後からインデックスをつけたほうが総要領は大きくなるようでした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ