mysqlが11M行をカウントする必要がある場合、単純なカウントを高速化する方法は実際にはあまりありません。少なくとも1秒未満の速度にしないでください。あなたは自分のカウントをどのように行うかを再考する必要があります。いくつかのアイデア:
-
テーブルに自動インクリメントフィールドを追加します。テーブルから削除しないように見えるので、簡単な計算を使用してレコード数を見つけることができます。最初の前の日付の最小自動増分数と後の日付の最大を選択し、一方を他方から減算してレコード数を取得します。例:
SELECT min(incr_id) min_id FROM record_updates WHERE date_updated BETWEEN '2009-10-11 15:33:22' AND '2009-10-12 23:59:59'; SELECT max(incr_id) max_id FROM record_updates WHERE date_updated > DATE_SUB(NOW(), INTERVAL 2 DAY);`
-
各日のレコード数を要約した別のテーブルを作成します。次に、そのテーブルに合計レコードを照会できます。毎年365レコードしかありません。よりきめ細かい時間にたどり着く必要がある場合は、要約テーブルで丸1日を照会し、現在のテーブルで開始日と終了日のレコード数だけを照会します。次に、それらをすべて一緒に追加します。
データが変更されていない場合、つまり変更されていないように見える場合は、サマリーテーブルの保守と更新が簡単になります。彼らは物事を大幅にスピードアップします。