【发布时间】:2012-01-22 06:10:14
【问题描述】:
信息
目前,我正在使用两个表 - 一个 POST 表保存单个帖子的数据,另一个 FAVORITES 表保存选择在其个人资料中保存最喜欢的帖子的用户的数据。
表格如下所示:
在 POSTS 表上,id 上只有一个主键,没有我设置的索引。在收藏夹中,我有一个正在测试的组合索引(postid、deviceid)。
POSTS 表包含大约。 10,000 个条目。
FAVORITES 表包含大约。 4,680,500 个条目。
我用来从特定设备 ID 中获取收藏夹的查询是:
SELECT post FROM POSTS
WHERE id IN
(SELECT postid FROM favourites WHERE deviceid="12d4a4a4a4a4a4a");
问题:
由于返回的数据量很大,并且多个设备有多个收藏夹,使用上述查询和子查询查询特定设备的 COUNT 个收藏夹和/或 SELECT 可能需要 7-10 秒以上的时间。在高峰时段发生这种情况时,您显然可以想象可能导致的问题。
缓存查询结果是一种选择,但由于数据非常具体,同一用户不会多次调用查询,而是唯一的实例,我认为有更好的解决方案。另一方面,缓存需要是短暂的,这将抵消它的好处。
我知道索引的方法,并且我熟悉外键,但我不确定是否以及如何在查询和子查询之间实现它们以提高性能。
非常感谢任何建议/指导。
干杯,
贾里德
【问题讨论】:
-
可以借助执行计划来分析查询性能。你可以为你的帖子发帖吗?