これが私の状況です。合計 13,3 GB のデータを持つ約 400 万のレコードを含む MySQL MyISAM テーブルがあります。このテーブルには、外部システムから受信したメッセージが含まれています。テーブル内の 2 つの列は、メッセージが処理されたかどうかに関係なく、タイムスタンプとブール値を追跡します。
このクエリを使用する場合:
SELECT MIN(timestampCB) FROM webshop_cb_onx_message
結果はほぼ瞬時に表示されます。
ただし、次のように、未処理のメッセージの最も古いタイムスタンプを見つける必要があります。
SELECT MIN(timestampCB ) FROM webshop_cb_onx_message WHERE handled = 0
このクエリの結果は約 3 分後に表示されますが、これは私が書いているスクリプトには遅すぎます。
両方の列は、まとめてではなく、個別に索引付けされます。ただし、テーブルにインデックスを追加するには、既にそこにあるデータの量を考慮すると、信じられないほど時間がかかります。
私の問題は、両方の列が別々にインデックス化されているという事実に起因していますか?もしそうなら、別のインデックスを追加する以外に私の問題を解決できる人はいますか?