我有一张大桌子。
让我们称之为“独角兽”。
第二桌'农民'
结构:
农民
独角兽
还有查询:
SELECT
f.id,
f.name,
COUNT(*)
FROM
farmers f
LEFT JOIN unicorns u
ON u.farmer_id = f.id
GROUP BY f.id
当然,表格确实不是这样命名的,而是有更多的字段等。但是我在这个例子中只留下了最重要的东西。
问题是系统在增长,并且有太多的独角兽。数以百万计。
此查询(如此)在农民列表页面上执行。
并且页面加载速度不如以前那么快,因为每次加载页面时我们都会加入一个数百万的表。
问题是:
如果您需要优化此项,您将如何实现此结果?
你会推荐什么?
P.S。
我个人认为我需要从主查询中排除big-table-join,单独计算unicorns计数并将它们存储在缓存存储中,一次又一次地重新计算它们。也许有最好的方式,所以我想听别人的意见。
答案 0 :(得分:2)
我会在农民桌上为NumberUnicorns添加一个额外的专栏并将其存储在那里。然后,通过一些数据库触发器,当一条记录被添加到独角兽表时,它只是用新记录中的相应计数更新农民表。如果删除了独角兽记录,还要考虑更新计数。然后,您的查询立即从农民表中完成。