29 lines
1.7 KiB
SQL
29 lines
1.7 KiB
SQL
-- 购物车商品记录页(/hard/hard-car-record)查询索引。
|
||
-- 幂等迁移脚本:可反复执行。索引先查 information_schema,已存在则跳过(执行 SELECT 1 占位),
|
||
-- 不存在才执行 DDL;已应用过的库重跑不会报 Duplicate key。
|
||
-- 背景:记录页与导出按 hard_car a JOIN hard_parent_car p(a.parent_car_id = p.id)
|
||
-- JOIN hard_order o(o.parent_car_id = p.id)关联,hard_order.parent_car_id 此前无索引,
|
||
-- 量级增长后三表 HASH JOIN 全表扫描会成为列表与导出的共同瓶颈。
|
||
|
||
-- 【可选诊断】两表 parent_car_id 现有索引。
|
||
SELECT 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_car', 'hard_order', 'hard_parent_car')
|
||
AND COLUMN_NAME = 'parent_car_id'
|
||
GROUP BY TABLE_NAME, INDEX_NAME;
|
||
|
||
-- hard_order 关联索引:缺失才创建(含租户与删除标记,与既有组合索引风格一致)。
|
||
SET @ddl = (SELECT IF(COUNT(*) = 0,
|
||
'ALTER TABLE `pjcloudx_hardware`.`hard_order` ADD KEY `idx_hard_order_parent_tenant_del` (`parent_car_id`, `tenant_id`, `del_flag`)',
|
||
'SELECT 1')
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = 'pjcloudx_hardware' AND TABLE_NAME = 'hard_order' AND INDEX_NAME = 'idx_hard_order_parent_tenant_del');
|
||
PREPARE stmt FROM @ddl;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
-- hard_parent_car 主键已覆盖 p.id 关联,无需新增;hard_car 侧已有
|
||
-- idx_hard_car_parent_tenant_del(parent_car_id, tenant_id, del_flag),无需新增。
|
||
-- 以上判断依据上方诊断查询输出,重跑时可复核。
|