hyapp-server/scripts/mysql/074_user_profile_followers_count.sql

47 lines
1.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
USE hyapp_user;
-- 粉丝数是资料卡高频读模型,新列使用 INSTANT DDL 只修改数据字典,
-- 避免资料卡每次打开都反向 COUNT user_follows。条件 DDL 保持重复执行安全。
SET @ddl := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'user_profile_stats'
AND COLUMN_NAME = 'followers_count') = 0,
'ALTER TABLE user_profile_stats
ADD COLUMN followers_count BIGINT NOT NULL DEFAULT 0 COMMENT ''粉丝数量'' AFTER following_count,
ALGORITHM=INSTANT',
'SELECT 1'
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 一次按现存 active 关注边回填;分组读取复用
-- idx_user_follows_followee_status(app_code, followee_user_id, status, updated_at_ms)
-- ON DUPLICATE KEY 同时覆盖已有投影并补齐历史上缺失的被关注者投影行。
INSERT INTO user_profile_stats (
app_code,
user_id,
visitors_count,
following_count,
followers_count,
friends_count,
updated_at_ms
)
SELECT
app_code,
followee_user_id,
0,
0,
COUNT(*),
0,
MAX(updated_at_ms)
FROM user_follows FORCE INDEX (idx_user_follows_followee_status)
WHERE status = 'active'
GROUP BY app_code, followee_user_id
ON DUPLICATE KEY UPDATE
followers_count = VALUES(followers_count),
updated_at_ms = GREATEST(user_profile_stats.updated_at_ms, VALUES(updated_at_ms));