4

約 10 億行の約 100 GB の MySQL テーブルがあります。8 つの列しかなく、そのうちの 1 つは、薄くスライスされた「BETWEEN」クエリを介してほとんどのルックアップに使用されるインデックス付きの DateTime です。

以前は、この列のインデックスはうまく機能していましたが、テーブルが大きくなり続けると、突然インデックスが機能しなくなりました。現在、EXPLAIN はすべてのクエリで "using filesort" を示しており、メモリ プールに適用可能なすべての my.conf 値を無駄に上げました。

キーが処理できる最大値はありますか? パーティショニングなどでこれを解決できますか?

任意の洞察をいただければ幸いです。ありがとう!

4

2 に答える 2

2

可能であれば、mysql サーバーを停止し、データ フォルダーに移動して実行します。

myisamchk -r <table_name>

また

myisamchk -r -v -f <table_name>

それはあなたのテーブルを修復するはずです。で試すこともできます

REPAIR TABLE <table_name>

詳細はこちらこちら

于 2012-04-14T19:06:28.333 に答える
1

ヒントによってインデックスの使用を強制しようとする場合があります。インデックス ヒントを説明している mysql ページを確認してください。非常に簡単な例は次のとおりです。

SELECT * FROM table1 USE INDEX (col1_index)
  WHERE col1 BETWEEN date1 AND date2;

しかし、それがあなたの主な問題だとは思いません。将来発生する可能性のある問題を予測するために、 MySQL Resource Limits Excerptを注意深く読むことを強くお勧めします。

ある時点で、それは次のように述べています。

If you do encounter a full-table error, there are several reasons why it might have occurred: 
...
You are using MyISAM tables on an operating system that supports files only up to 2GB in size and you have hit this limit for the data file or index file.

それはあなたには当てはまらないようです。しかし、この時点でいくつかの可能性を考えることができます。

また、「myisampack」というキーワードですばやく検索することを強くお勧めします。

于 2012-04-14T19:00:43.440 に答える