重现步骤
严重级别:一般
所属项目:aliexpress
问题原因:慢SQL、大表、多表JOIN:(SELECT
tus.id,
tus.customer_id,
tus.strategy_name,
tus.policy_id,
tus.business_type,
tus.sku_type,
tus.template_name,
tus.product_strategy_name,
tus.strategy_type,
tus.STATUS,
tus.last_execute_time,
tus.execute_status,
tus.execute_type,
tus.execute_cycle,
tus.interval_days,
tus.drive_table,
tusif.import_vals sourceIds
FROM
t_strategy_aliexpress tus
LEFT JOIN t_strategy_rule_aliexpress tusr ON tus.id = tusr.strategy_id
AND tusr.rule_code = 'driver_group'
AND tusr.is_deleted = 0
LEFT JOIN (SELECT import_id, group_concat(DISTINCT import_val) import_vals FROM t_strategy_import_filter_aliexpress WHERE import_type = 1 AND is_deleted = 0 AND rule_code = 'driver_group' GROUP BY import_id) tusif ON tus.id = tusif.import_id
AND tusr.filter_express = '9'
WHERE
tus.is_deleted = 0
AND tus.STATUS = 1
AND tus.strategy_type = 6;)
解决方案:第一、把索引idx_strategy_id 调整为:(strategy_id, rule_code, is_deleted, filter_express)
第二、先查小表(建议增加分页查,避免数据增长后,出现性能问题)
SELECT
tus.id,
tus.customer_id,
tus.strategy_name,
tus.policy_id,
tus.business_type,
tus.sku_type,
tus.template_name,
tus.product_strategy_name,
tus.strategy_type,
tus.STATUS,
tus.last_execute_time,
tus.execute_status,
tus.execute_type,
tus.execute_cycle,
tus.interval_days,
tus.drive_table
FROM
t_strategy_aliexpress tus
LEFT JOIN t_strategy_rule_aliexpress tusr ON tus.id = tusr.strategy_id
AND tusr.rule_code = 'driver_group'
AND tusr.is_deleted = 0
-- LEFT JOIN (SELECT import_id, group_concat(DISTINCT import_val) import_vals FROM t_strategy_import_filter_aliexpress WHERE import_type = 1 AND is_deleted = 0 AND rule_code = 'driver_group' GROUP BY import_id) tusif ON tus.id = tusif.import_id
-- AND tusr.filter_express = '9'
WHERE
tus.is_deleted = 0
AND tus.STATUS = 1
AND tus.strategy_type = 6 limit 50
第三、再通过第二中查询的数据,再批量查2000多万大表t_strategy_import_filter_aliexpress的数据(记得使用合适的索引)
已经转需求处理了,禅道需求ID:29552 IMS:多平台运营管理系统慢SQL及性能优化V6
对应改造列表:207