在MySQL中进行LEFT JOIN与缓存数据的成本

时间:2017-01-15 23:17:39

标签: mysql caching redis

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

内容表

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

标题表

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

要快速恢复系统,多个用户会为内容提供标题。但每次我选择一个内容时,我都需要找到合适的标题(我采取了最多的用户女巫已经发布了这个内容的标题)。

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

  • 我可以在内容表格上选择标题表格上的LEFT JOIN,以及带有一些MAX的用户表格(nb_subscribers) )......
  • 我只能在内容上执行SELECT,然后使用像Redis这样的缓存系统来缓存1天之类的标题(在这种情况下,如果需要新的MySQL调用,则需要新的MySQL调用找不到标题)

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

1 个答案:

答案 0 :(得分:0)

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

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