Files
biz-api-cloud-zax/db/20260916_add_hard_appt_statistics_index.sql
T

56 lines
3.4 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.
-- 食堂预约人员统计(/hard/hard-canteen-appt-total-log/app/user-reserv-daily-statistics 等)查询索引。
-- 幂等迁移脚本:可反复执行。索引先查 information_schema,已存在则跳过(执行 SELECT 1 占位),
-- 不存在才执行 DDL;已应用过的库重跑不会报 Duplicate key。
-- 背景:人员预约统计按商户范围 + 预约/核销日期范围查询 hard_order(基线 DDL 仅有主键索引,
-- 只能全表扫),退款净商品聚合按 parent_car_id 过滤 hard_after_sale_car 同样无索引。
-- 配套代码改动:HardCarMapper.listEffectiveReservationCars 已把父购物车 IN 条件下推进内层聚合,
-- hard_after_sale_car 需要本索引才能走索引范围扫描;hard_order 的两个组合索引分别覆盖
-- 默认(appt_use_date 范围)与已核销(verification_time 范围)两种统计口径。
-- 执行顺序:本脚本须先于 pjcloud-hardware-biz 新版本部署手工执行。
-- 取舍说明:hard_order 由此新增 2 个二级索引(连同 20260915 的 parent_car 索引共 3 个二级索引),
-- 离线消费机批量补传等写入链路会有少量额外索引维护成本;若确认已核销口径流量占比很低,
-- 可先只执行前两个索引、暂缓 idx_hard_order_tenant_mch_verify。
-- 【可选诊断】相关表现有索引一览,执行前后可对比复核。
SELECT TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS index_columns
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'pjcloudx_hardware'
AND TABLE_NAME IN ('hard_order', 'hard_car', 'hard_after_sale_car')
GROUP BY TABLE_NAME, INDEX_NAME;
-- hard_order 默认统计口径:tenant 等值 + 商户等值集合 + 预约使用日期范围。
SET @ddl = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE `pjcloudx_hardware`.`hard_order` ADD KEY `idx_hard_order_tenant_mch_appt` (`tenant_id`, `merchant_id`, `appt_use_date`)',
'SELECT 1')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'pjcloudx_hardware' AND TABLE_NAME = 'hard_order'
AND INDEX_NAME = 'idx_hard_order_tenant_mch_appt');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- hard_order 已核销统计口径:核销时间范围替代预约使用日期范围。
SET @ddl = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE `pjcloudx_hardware`.`hard_order` ADD KEY `idx_hard_order_tenant_mch_verify` (`tenant_id`, `merchant_id`, `verification_time`)',
'SELECT 1')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'pjcloudx_hardware' AND TABLE_NAME = 'hard_order'
AND INDEX_NAME = 'idx_hard_order_tenant_mch_verify');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- hard_after_sale_car 退款净额聚合:父购物车下推过滤后走索引范围扫描,避免全表聚合。
SET @ddl = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE `pjcloudx_hardware`.`hard_after_sale_car` ADD KEY `idx_hard_after_sale_car_parent_del` (`parent_car_id`, `del_flag`)',
'SELECT 1')
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'pjcloudx_hardware' AND TABLE_NAME = 'hard_after_sale_car'
AND INDEX_NAME = 'idx_hard_after_sale_car_parent_del');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- hard_car 侧已有 idx_hard_car_parent_tenant_del(parent_car_id, tenant_id, del_flag),
-- 下推后的购物车聚合直接复用,无需新增;以上判断依据上方诊断查询输出,重跑时可复核。