【问题标题】:Cost of doing a LEFT JOIN in MySQL vs caching the data在 MySQL 中进行 LEFT JOIN 与缓存数据的成本
【发布时间】:2017-05-30 18:19:37
【问题描述】:

所以我有以下 MySQL 表的项目:

内容表

+------------+------------+
| content_id | some infos |
+------------+------------+
|          1 | ...        |
|          2 | ...        |
+------------+------------+

标题表

+----+----------+---------+------------+--------------+
| id |  title   | user_id | content_id | other things |
+----+----------+---------+------------+--------------+
|  1 | "blabla" |       1 |          1 | ...          |
|  2 | "blabla" |      59 |         25 | ...          |
+----+----------+---------+------------+--------------+

为了快速恢复系统,多个用户为内容赋予标题。但是每次我选择一个内容时,我都需要找到合适的标题(我选择关注最多的用户女巫为这个内容发布了一个标题)。

所以,为了做到这一点,我看到了 2 个解决方案:

  • 我可以在 content 表上使用 LEFT JOIN 对 title 表和我的 user 表和一些 MAX (nb_subscribers ) ...
  • 我只能在 content 上执行 SELECT,然后使用 Redis 之类的缓存系统将标题缓存 1 天(在这种情况下,如果找不到标题)

主要问题是这些内容会被加载很多次,如果 LEFT JOIN 方法需要大量时间来处理,我想知道您的建议。

【问题讨论】:

    标签: mysql caching redis


    【解决方案1】:

    假设后者在content_id 列上有索引,我认为在contenttitle 表之间执行LEFT JOIN 没有任何问题:

    SELECT c.*, t.*
    FROM content c
    LEFT JOIN title t
        ON c.content_id = t.content_id
    -- can also join to user table if needed
    

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 2010-12-18
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2012-04-02
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多