Files
biz-api-cloud-zax/db/20261009_add_third_push_delivery_page_index.sql
T

32 lines
1.9 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.
-- 20261009 商户投递记录分页索引(可重复执行)
--
-- 背景:/app-message/pc/deliveries 页面查询(source_mch_id + recipient_user_id 过滤,
-- create_time desc, id desc 排序)在 third_push_delivery 上仅有
-- (tenant_id, source_mch_id, create_time, del_flag) 索引,recipient_user_id
-- 不在索引中,需沿商户范围逐行回表过滤;表增长到约 21 万行后实测 COUNT 约 2.2 秒。
-- 方案:新增与页面查询形态精确匹配的复合索引,等值(mch, recipient)后按 create_time 有序,
-- 分页与 COUNT 均为索引前缀范围扫描;无 recipient 条件时退回既有商户时间索引,不受影响。
-- 执行:Online DDL(INPLACE + LOCK=NONE,不锁表),21 万行预计 5~15 秒,建议低峰执行。
-- 回滚:文末 DROP INDEX。
USE pjcloudx_thirdparty;
SET @ddl = IF(
(SELECT COUNT(*) FROM information_schema.statistics
WHERE table_schema = 'pjcloudx_thirdparty' AND table_name = 'third_push_delivery'
AND index_name = 'idx_third_push_delivery_mch_recipient') = 0,
'ALTER TABLE third_push_delivery ADD INDEX idx_third_push_delivery_mch_recipient (tenant_id, source_mch_id, recipient_user_id, create_time, id), ALGORITHM=INPLACE, LOCK=NONE',
'SELECT ''skip: idx_third_push_delivery_mch_recipient 已存在'' AS msg');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
ANALYZE TABLE third_push_delivery;
-- ============ 执行后验证(期望 key=idx_third_push_delivery_mch_recipient) ============
-- EXPLAIN SELECT id FROM pjcloudx_thirdparty.third_push_delivery
-- WHERE tenant_id = 1 AND source_mch_id = 2078051759222632449
-- AND recipient_user_id = 2034824566572941314
-- ORDER BY create_time DESC, id DESC LIMIT 20;
-- ============ 回滚(如需) ============
-- ALTER TABLE pjcloudx_thirdparty.third_push_delivery DROP INDEX idx_third_push_delivery_mch_recipient;