9a6b57db58
模块边界(G5 / G7) - 新增 task/spi/TaskModuleHeartbeatSpi + 13 个模块实现:TaskHeartbeatService 不再 import 任何 业务模块(原先注入 12 个 CacheService 并用 switch 分发);启动校验重复注册 - 新增 task/spi/BrandTaskHeartbeatSpi(品牌任务心跳/中断)、BrandTaskStaleRepairSpi(陈旧修复)、 CollectDataItemCleanupSpi(历史清理):跨模块 Mapper 操作收回业务模块 - G7:10 个被跨模块借用的 productrisk VO 迁至 common/model/vo - 架构棘轮收紧:TASK_TO_BUSINESS_BASELINE 119 → 6(实测) - 新增 TaskModuleHeartbeatSpiCoverageTest(moduleType 覆盖与拼写) 性能与容量(C5/C6/C7/D13) - C5 流式解析:SkipPriceAsinService(含两行表头语义)、AppearancePatentExcelParser、 BrandTaskService、DeleteBrandRunService、LocalFileStorageService.getExcelInfo 改 ExcelStreamReader; 行数上限改为迭代中生效 - C6 去重总数据列表:关键字改前缀匹配(命中 uk_data_value);V124 删除永不生效的 idx_country - C7 撞款扫描:按店逐批取数(索引前缀),不再全表 GROUP BY + JOIN + 全量拉内存 - D13 待删对象本地日志 PendingDeleteJournal(启动回放 + 收敛重写),RustfsDeleteRetryService 与 TransientPayloadDeleteOrchestrator 接入;异步删除失败对象写回日志 - V123 删除 biz_file_result 两个被复合索引覆盖的单列索引 安全(A3/A4/A7 + 守卫名单) - A4 数字人版本写操作要求管理员;A7 视频密钥按登录身份(超管例外) - A3 上传接口加危险扩展名黑名单(可配置) - AdminApiGuardFilter 用户态名单补 /api/ziniao(controller 已 requireAdmin,此处为开关打开后的第二层) 容量(明细表保留期) - 新增 ShopDataCrawlItemRetentionService:biz_shop_data_crawl_item 按保留期(默认 30 天)分批清理 (该表此前无任何清理策略,是增长最快的表),job 锁 + 单轮批次上限
47 lines
1.8 KiB
SQL
47 lines
1.8 KiB
SQL
-- V123: 删除 biz_file_result 上被复合索引完全覆盖的两个单列索引
|
|
--
|
|
-- 判定原则(同 V121):被删索引的列是另一索引的**严格前缀**,
|
|
-- 所有能用它的查询都能被保留的复合索引覆盖,删除只减少写入侧的索引维护与 buffer pool 占用。
|
|
--
|
|
-- 1) biz_file_result.idx_task_id (task_id)
|
|
-- 被 V38 的 idx_file_result_task_module_id (task_id, module_type, id) 覆盖。
|
|
-- 2) biz_file_result.idx_module_type (module_type)
|
|
-- 被 V34 的 idx_biz_file_result_module_user_created (module_type, user_id, created_at)
|
|
-- 与 V42 的 idx_file_result_patrol_history (module_type, user_id, created_at, id) 覆盖。
|
|
-- 两处均为 V1 建表时的遗留索引(当时还没有任何复合索引)。
|
|
--
|
|
-- 风险:DROP INDEX 为 INPLACE 在线操作,但会立即改变执行计划;两者均为「被覆盖」判定。
|
|
-- 回滚:
|
|
-- ALTER TABLE biz_file_result ADD INDEX idx_task_id (task_id);
|
|
-- ALTER TABLE biz_file_result ADD INDEX idx_module_type (module_type);
|
|
|
|
SET @db_name = DATABASE();
|
|
|
|
-- 1) biz_file_result.idx_task_id
|
|
SET @idx_exists := (
|
|
SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'biz_file_result'
|
|
AND INDEX_NAME = 'idx_task_id'
|
|
);
|
|
SET @sql := IF(@idx_exists > 0,
|
|
'ALTER TABLE biz_file_result DROP INDEX idx_task_id',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
-- 2) biz_file_result.idx_module_type
|
|
SET @idx_exists := (
|
|
SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'biz_file_result'
|
|
AND INDEX_NAME = 'idx_module_type'
|
|
);
|
|
SET @sql := IF(@idx_exists > 0,
|
|
'ALTER TABLE biz_file_result DROP INDEX idx_module_type',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|