2

整数データのセットがあります。最初の数字は 0 で、最後の数字は 47055833459 です。これらの数字は、最初から最後まで 20 億あり、決して変更されたり追加されたりすることはありません。mysql テーブルへの唯一の挿入は、このデータをそこにロードすることです。それ以降は、読み取り専用になります。

データベース テーブルのサイズは約 20Gb になると予測しています。次の 2 つの列を作成する予定です。

id, data

Id は主キーになり、自動インクリメントされた符号なし INT になり、データは符号なし BIGINT になります

このデータをこれら 2 つの列で読み取り専用に最適化する最善の方法は何ですか? 同様の他の質問を見てきましたが、それらはすべて書き込み速度と増え続けるテーブルを考慮しています。私が使用しているホストは MySQL パーティショニングをサポートしていないため、残念ながらこれは現時点ではオプションではありません。パーティショニングが唯一の方法であることが判明した場合は、新しいホストを再検討します。

テーブルは id 列によってのみアクセスされるため、データ列にインデックスを作成する必要はありません。

要約すると、MySQL で、読み取り用に最適化されたパーティション分割なしで、2 つの列を持つ 20 億行のテーブルを処理する最良の方法は何ですか?

4

2 に答える 2

0

そのようにテーブルを定義します。

CREATE TABLE `lkup` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `data` BIGINT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`, `data`)
) 

複合主キーはディスク容量を消費しますが、検索が非常に高速になります。クエリは、インデックス (カバリング インデックスと呼ばれます) を読み取るだけで満たすことができます。

そして、OPTIMIZE TABLE lkup静的データのロードが完了したら実行してください。しばらく時間がかかる場合がありますが、実行時に大きな成果が得られます。

于 2013-08-14T23:36:43.323 に答える