首先,我很抱歉,因为我无法为这个问题想出更好的标题。
我的网站上有一个徽章/成就系统,社区用户根据他们在网站上的活动获得特定的徽章奖励,下面的 sql 示例我用来提取至少发表 100 个论坛帖子的用户数量(我使用的是 informix db版本 10)
SELECT tjm.userid::INTEGER AS user_id,
EXTEND(DBINFO("UTC_TO_DATETIME",tjm.creationdate/1000), year to fraction)
AS earned_date
FROM TABLE(
MULTISET(
SELECT jm.userid, jm.creationdate, (
SELECT COUNT(*) from TABLE(
MULTISET(
SELECT userid, creationdate
FROM jive:jivemessage
)
) AS i
WHERE i.userid = jm.userid AND i.creationdate < jm.creationdate
) + 1 AS row_num
FROM jive:jivemessage jm
)
) AS tjm
WHERE tjm.row_num=100
这条 sql 执行大约需要 30 多分钟,我们有一个非常大的社区,并且有数百万个论坛帖子。
我想知道是否有提高查询性能的解决方案?我试图减少执行时间,因为我有 40 个与此类似的 sql 查询,但针对不同的表和活动。