-- ============================================================================ -- 学生名册变更指纹:稳态只写变更行 -- -- 背景:gxmu_student 已有 9.8 万行时,一次全量 upsert 实测 88 秒(800 行/批 716ms × 123 批), -- 而窄读全部 (xh, row_hash) 只要 2.4 秒。多数行每天并不变化,没必要每天重写一遍。 -- 做法:把「平台权威字段」拼成一个指纹存在 row_hash 里,同步时先窄读现有指纹, -- 只 upsert 指纹变化的行。 -- -- 附带好处:未变更的行不再被刷新 update_time,该字段恢复其「最后真正变更时间」的含义。 -- -- 可重复执行 -- ============================================================================ SET @exist := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gxmu_student' AND COLUMN_NAME = 'row_hash'); SET @stmt := IF(@exist = 0, 'ALTER TABLE `gxmu_student` ADD COLUMN `row_hash` VARCHAR(32) NULL COMMENT ''平台权威字段指纹,用于跳过未变更行'' AFTER `deleted`', 'SELECT 1'); PREPARE s FROM @stmt; EXECUTE s; DEALLOCATE PREPARE s;