yumi-java/sql/20260716_user_country_sync_indexes.sql
hy001 c884827072 feat(other): 国家资料级联同步用户与团队冗余快照
- 新增国家级/用户级 Redis 写锁(token+Lua 安全释放),统一 country -> user 锁序
- 后台改国家码/名称时按 countryId 游标分批同步 RDS 与 mongo 全部国家冗余字段,
  含注册国家码同事务重命名、团队区域重算(CAS + 投影回滚)与两次缓存失效
- 建团(BD 邀请/后台)、改用户资料、注册、编辑团队等写国家快照路径接入锁防竞态,
  团队国家码一律取国家主表标准值
- 违规调整/账号状态改为仅写变更字段,防止旧快照覆盖同步结果
- 团队账单结算改用账单自身 region,配合团队迁区
- 补充 user_base_info (country_id,id) 索引与 mongo 复合索引迁移脚本

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 20:11:57 +08:00

31 lines
1.2 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.

-- 国家资料级联同步按 (country_id, id) 游标分页;该索引避免国家更新时扫描整张用户表。
-- 生产表当前约 1.4 万行/4.5 MB使用 INPLACE + LOCK=NONE且限制元数据锁等待避免影响在线请求。
SET @current_schema = DATABASE();
SET SESSION lock_wait_timeout = 10;
SET @ddl = IF(
EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS first_column
WHERE first_column.TABLE_SCHEMA = @current_schema
AND first_column.TABLE_NAME = 'user_base_info'
AND first_column.SEQ_IN_INDEX = 1
AND first_column.COLUMN_NAME = 'country_id'
AND EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS second_column
WHERE second_column.TABLE_SCHEMA = first_column.TABLE_SCHEMA
AND second_column.TABLE_NAME = first_column.TABLE_NAME
AND second_column.INDEX_NAME = first_column.INDEX_NAME
AND second_column.SEQ_IN_INDEX = 2
AND second_column.COLUMN_NAME = 'id'
)
),
'SELECT 1',
'ALTER TABLE `user_base_info` ADD KEY `idx_country_id_id` (`country_id`, `id`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;