我在这里有一个问题:
SELECT MAX(Sales.Revenue-Sales.Costs), Company.Name
FROM Sales
INNER JOIN Company
ON Company.ID = Sales.ID
WHERE Sales.Date <= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH);
我的问题:我应该在哪里使用索引?为什么?
答案 0 :(得分:1)
对于此查询:
SELECT MAX(s.Revenue - s.Costs), c.Name
FROM Sales s INNER JOIN
Company c
ON c.ID = s.ID
WHERE s.Date <= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
GROUP BY c.Name;
最佳索引是复合索引(即具有多个列):sales(date, id, revenue, costs)
和company(id, name)
。这些索引覆盖查询。这意味着所有数据都在索引中,因此不需要访问原始数据页。由于查询是结构化的,MySQL仍然需要使用filesort进行聚合。
注意:
group by
,因此查询有意义。答案 1 :(得分:0)
如果您的销售和公司表有大量数据,那么您可能需要创建以下索引: -
Sales -> Sales.ID
Sales -> Sales.Date
Company -> Company.ID
您需要这些索引,因为您在连接和WHERE子句中使用这些列。如果表中有大量记录,则缺少索引会降低查询速度。