寻找产品的最早历史条目我应该加入 history/product table 还是在产品 table 中存储价值?

Looking for the earliest history entry of a product should I join history/product tables or store value in product table?

我有一个 MySQL 数据库,其中包含产品的 table 和包含这些产品的 buying/selling 历史记录的 table。每个商品的买卖历史基本都在这个历史记录table.
我正在寻找最有效的方法来创建这些产品的列表,其中包含历史记录中最早的交易数据 table 已加入。
目前,我的 SQL 查询选择具有最早历史条目的产品,如下所示:

SELECT p.*
     , h.transdate
     , h.sale_price 
  FROM products p
  LEFT 
  JOIN 
     ( SELECT MIN(transdate) transdate
             , product_id 
          FROM history
        GROUP 
            BY product_id
     ) hist_min
  ON hist_min.product_id = p.id
  LEFT 
  JOIN history h
  ON h.product_id = hist_min.product_id 
   AND h.transdate = hist_min.transdate

由于此查询的使用非常频繁并且可能与许多产品一起使用,我正在考虑将第一个 sale_price 直接存储在 'products' table 中。这样我就根本不需要 2 个额外的 JOINS。但这意味着我存储了冗余数据。
对我来说最重要的问题是,这些可能性中哪一个是最有效的。
我不确定我是否可以再问这个问题,但如果有更好的方法我想知道。

编辑: 为了澄清 'efficient',我说的是数以万计的产品,每个产品可能有 10 条历史记录,我只选择分页的 20 个带有 LIMIT陈述。将原始价格与产品一起保存将直接从记录中提取数据,而扫描历史记录中的日期 table 最早的时间并再次扫描以加入实际的数据行肯定需要更多资源,即使只涉及第二个 table。使用主键 ID oder 索引 product_id 和 transdate 肯定会加速第二次连接。

您所描述的是 'normalization'。规范化程度不是非黑即白的区域,所以我不认为这个网站是获得答案的地方,因为它主要基于意见。

查看这些链接以开始使用:

Database Normalization Explained in Simple English

Wikipedia(查看 'See also' 部分,它描述了规范化级别)