56 lines
3.4 KiB
SQL
56 lines
3.4 KiB
SQL
-- 食堂预约人员统计(/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),
|
||
-- 下推后的购物车聚合直接复用,无需新增;以上判断依据上方诊断查询输出,重跑时可复核。
|