2011-02-04 10 views
3

私は1,000,000レコードのテーブルを持っており、私は〜700k行を削除しているステートメントを実行しています。オートインクリメントインデックスは、もちろん1,000,001です。その後の最大プライマリキー、たとえば40,000。多くの行を削除した後、テーブルインデックスをリセット/最適化する必要がありますか?

このような行の巨大な削除の後、手動でインデックスを40,001に手動で設定するか、テーブルを最適化する必要がありますか?あるいは、新しい行を挿入し、後で(速度の点で)select文で索引を使用するとき、MySQLはこの大きなギャップを気にしませんか?

+1

ID番号を再使用することは、実際に利用可能なIDが本当に低い場合を除き、決して良い考えではありません。 –

+0

@Matti:それでも、以前の削除されたキーとの衝突を防ぐために、bigint(もちろん署名なし)など、ID列に別のデータ型を使用する方が良いでしょう... – ircmaxell

+0

うーん..あなたが正しいと思います。主キーを再使用するのは一般的には悪い考えです。 – acme

答えて

2

MySQLのmanualは言う:あなた がテーブルの大部分を削除した場合

OPTIMIZE TABLEは使用すべきである か、可変長の列で テーブルに多くの変更を加えた場合

しかし、プライマリキーをリセットしないでください、それは物事を混乱させる可能性があります。 INTデータ型(おそらく)は1Mから成長する余地があります。クエリの速度の面では

、それはインデックス値はOPTIMIZE TABLEを使用して1 000 000で、または1 000 000 000

1

であるかどうかは関係ありません、その後のMySQLがクエリをpeformする最善の方法/最速決定するのに役立ちます、例えばインデックスまたはテーブルスキャンのみを使用しますか?これはStatisticsと呼ばれるものを使用していますので、OPTIMIZE TABLEを呼び出すと基本的に重要な変更を加えたというヒントが得られます。

関連する問題