単純なテーブルuser_id
(INT)、date
(DATE)、およびearnings
(FLOAT)があるとします。このテーブルにインデックスを付ける方法を決定しようとしています。
現在、PRIMARYキーをuser_id
、に設定していdate
ます。
ただし、すべてのクエリがこのキーを使用しているわけではありません。以下にいくつかのクエリ例を貼り付けました。これらはすべて頻繁に実行されます。
SELECT SUM(earnings) FROM stats WHERE user_id=? //Get total earnings
SELECT SUM(earnings) FROM stats WHERE user_id=? AND date between ? AND ? //Get earnings for date range
SELECT user_id FROM stats WHERE date=$today ORDER BY earnings DESC LIMIT 0,5 //Get todays highest earners
SELECT user_id FROM stats WHERE date>$month ORDER BY earnings DESC LIMIT 0,5 //Get months highest earners
ご覧のとおり、上位2つのクエリはインデックスを適切に使用していますが、次の2つは使用していません。
にインデックスを作成することを考えていましたが、すでにインデックスに含まれているためdate
、earnings
奇妙に感じます。date
これは正しい解決策ですか?
そうでない場合、このテーブルにインデックスを付けるための最良の方法は何ですか?