【问题标题】:When to use an index? [duplicate]什么时候使用索引? [复制]
【发布时间】:2016-03-09 18:29:18
【问题描述】:

我有一个问题:

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

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

【问题讨论】:

  • 从概念上讲,但我也希望从具体的例子中学习,比如我列出的例子(我也会从这个链接学习例子,谢谢)
  • 一方面,我们需要知道您使用的是什么具体数据库 - 索引策略通常是特定于供应商的,因此它们从 SQL Server 到 Oracle 到 DB2 到 MySQL 到 PostgreSQL 等等。
  • 你应该用你正在使用的数据库来标记你的问题(根据语法可能是 MySQL)。

标签: sql indexing


【解决方案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 仍然需要使用文件排序进行聚合。

注意事项:

  • 我添加了group by,这样查询才有意义。
  • 表别名使查询更易于编写和阅读。

【讨论】:

    【解决方案2】:

    如果您的销售和公司表有大量数据,那么您可能需要创建以下索引:-

    Sales -> Sales.ID
    Sales -> Sales.Date
    Company -> Company.ID
    

    当您在连接和 WHERE 子句中使用这些列时,您需要这些索引。如果表有大量记录,没有索引会减慢您的查询速度。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2021-05-09
      • 2014-04-29
      • 2011-09-12
      • 2012-12-16
      相关资源
      最近更新 更多