我有一个如下表结构:
user
id
name
profile_stat
id
name
profile_stat_value
id
name
user_profile
user_id
profile_stat_id
profile_stat_value_id
我的问题是:
如何针对多个统计信息评估我想要查找具有profile_stat_id和profile_stat_value_id的所有用户的查询?
我尝试过进行内部自我加入,但在搜索许多统计信息时很快就会发疯。我也尝试过对实际的user_profile表进行计数,这样做要好得多,但仍然很慢。
我有什么魔法吗?我在user_profile表中有大约1000万行,并且希望查询不超过几秒钟。这可能吗?
答案 0 :(得分:0)
通常,数据库能够以体面的方式处理1000万条记录。我在我们的专业环境中大多使用了oracle,其中包含大量数据(大约30-40万行),甚至对表进行连接查询也从未花费过一两秒钟的时间来运行。
On IMPORTANT lessson我意识到每当查询性能不好时,看看是否在连接字段上正确定义了索引。例如。这里有profile_stat_id索引和profile_stat_value_id(我假设的user_id是主键)应该定义索引。如果你没有这样做,这肯定会给你一个很好的性能提升。 在定义索引之后,执行一次或两次查询以使DB有机会在验证增益之前计算索引树和查询计划
答案 1 :(得分:0)
从表面上看,你似乎要求这个,其中包括没有自我加入:
SELECT u.name, u.id, s.name, s.id, v.name, v.id
FROM User_Profile AS p
JOIN User AS u ON u.id = p.user_id
JOIN Profile_Stat AS s ON s.id = p.profile_stat_id
JOIN Profile_Stat_Value AS v ON v.id = p.profile_stat_value_id
如果相应的表格不需要匹配的条目,则列出的任何联接都可以更改为LEFT OUTER JOIN。所有这一切都是将中央User_Profile表与相应连接列上的其他三个表连接起来。
您认为自己需要自我加入?
[我没有包含任何内容来过滤“众多统计数据”;对我来说,问题的这一部分意味着什么并不清楚。]