何时使用索引?

时间:2015-12-04 18:17:14

标签: sql indexing

我在这里有一个问题:

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);

我的问题:我应该在哪里使用索引?为什么?

2 个答案:

答案 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子句中使用这些列。如果表中有大量记录,则缺少索引会降低查询速度。