68 lines
3.4 KiB
SQL
68 lines
3.4 KiB
SQL
-- Yumi Game King: real winning-income ranking, separate reward configs, and daily chance cap.
|
|
--
|
|
-- Performance review:
|
|
-- 1. Activity/rank-reward/settlement are small configuration/result tables; their ALTERs are
|
|
-- bounded metadata/index rebuilds and do not touch the 35M-row task archive.
|
|
-- 2. User aggregate ALTERs add two narrow columns plus ranking indexes. Run during low traffic:
|
|
-- MySQL builds each index once; online DDL keeps reads/writes available with LOCK=NONE.
|
|
-- 3. No historical ledger is scanned or backfilled here. New winning rows arrive from the
|
|
-- canonical GAME_WIN_GOLD event. The daily-user index makes chance sums proportional to one
|
|
-- user's active dates instead of all activity participants.
|
|
-- 4. Existing six TYCOON reward rows are copied once to VICTORIOUS so old activities remain
|
|
-- editable; operators can replace each board's six resource groups before enabling.
|
|
|
|
ALTER TABLE `yumi_game_king_activity`
|
|
ADD COLUMN `daily_chance_limit` INT NOT NULL DEFAULT 10 AFTER `coin_per_draw`,
|
|
ALGORITHM=INSTANT;
|
|
|
|
ALTER TABLE `yumi_game_king_rank_reward`
|
|
DROP INDEX `uk_yumi_gk_rank_range`,
|
|
DROP INDEX `idx_yumi_gk_rank_start`,
|
|
ADD COLUMN `ranking_type` VARCHAR(32) NOT NULL DEFAULT 'TYCOON' AFTER `activity_id`,
|
|
ADD UNIQUE KEY `uk_yumi_gk_rank_range` (`activity_id`, `ranking_type`, `start_rank`, `end_rank`),
|
|
ADD KEY `idx_yumi_gk_rank_start` (`activity_id`, `ranking_type`, `start_rank`),
|
|
ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
INSERT INTO `yumi_game_king_rank_reward` (
|
|
`id`, `activity_id`, `ranking_type`, `start_rank`, `end_rank`, `resource_group_id`,
|
|
`reward_name`, `reward_items_json`, `create_time`, `update_time`
|
|
)
|
|
SELECT UUID_SHORT(), `activity_id`, 'VICTORIOUS', `start_rank`, `end_rank`, `resource_group_id`,
|
|
`reward_name`, `reward_items_json`, `create_time`, `update_time`
|
|
FROM `yumi_game_king_rank_reward`
|
|
WHERE `ranking_type` = 'TYCOON';
|
|
|
|
ALTER TABLE `yumi_game_king_consume_ledger`
|
|
ADD COLUMN `event_type` VARCHAR(32) NOT NULL DEFAULT 'GAME_CONSUME_GOLD' AFTER `sys_origin`,
|
|
ALGORITHM=INSTANT;
|
|
|
|
ALTER TABLE `yumi_game_king_user`
|
|
ADD COLUMN `total_won` BIGINT NOT NULL DEFAULT 0 AFTER `total_consumed`,
|
|
ADD COLUMN `win_reached_time` DATETIME(3) NULL AFTER `consume_reached_time`,
|
|
ADD KEY `idx_yumi_gk_user_win_rank` (
|
|
`activity_id`, `total_won` DESC, `win_reached_time` ASC, `user_id` ASC
|
|
),
|
|
ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
ALTER TABLE `yumi_game_king_user_daily`
|
|
ADD COLUMN `total_won` BIGINT NOT NULL DEFAULT 0 AFTER `total_consumed`,
|
|
ADD COLUMN `win_reached_time` DATETIME(3) NULL AFTER `consume_reached_time`,
|
|
ADD KEY `idx_yumi_gk_daily_user_chance` (`activity_id`, `user_id`, `stat_date`),
|
|
ADD KEY `idx_yumi_gk_daily_win_rank` (
|
|
`activity_id`, `stat_date`, `total_won` DESC, `win_reached_time` ASC, `user_id` ASC
|
|
),
|
|
ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
ALTER TABLE `yumi_game_king_settlement_record`
|
|
DROP INDEX `uk_yumi_gk_settle_user`,
|
|
DROP INDEX `uk_yumi_gk_settle_rank`,
|
|
ADD COLUMN `ranking_type` VARCHAR(32) NOT NULL DEFAULT 'TYCOON' AFTER `activity_id`,
|
|
ADD COLUMN `score` BIGINT NOT NULL DEFAULT 0 AFTER `total_consumed`,
|
|
ADD UNIQUE KEY `uk_yumi_gk_settle_user` (`activity_id`, `ranking_type`, `user_id`),
|
|
ADD UNIQUE KEY `uk_yumi_gk_settle_rank` (`activity_id`, `ranking_type`, `rank_no`),
|
|
ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
UPDATE `yumi_game_king_settlement_record`
|
|
SET `score` = `total_consumed`
|
|
WHERE `ranking_type` = 'TYCOON' AND `score` = 0;
|