假设我有一个简单的表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
如您所见,前两个查询很好地使用了索引,但后两个没有。
我正在考虑在 上创建一个索引date
,earnings
但感觉很奇怪,因为date
它已经在一个索引中。这是正确的解决方案吗?
如果没有,索引该表的最佳方法是什么?