| 12345678910111213141516171819202122 | 
-- 执行如下sql,执行时间为1.159s,最大扫描行3.01M,但是仅返回1条数据-- SELECT count(*) AS count FROM `zh_change_apply` AS a WHERE a.status=? AND a.tid=? AND (a.uid=? OR a.id IN (SELECT b.caid FROM `zh_change_apply_audit` AS b WHERE b.aid=? AND a.times=b.times GROUP BY b.caid))-- SELECT SUM(cast(a.total_price AS decimal(?,?))) AS total_price FROM `zh_change_apply` AS a WHERE a.tid=? AND (a.uid=? OR (a.status!=? AND a.id IN (SELECT b.caid FROM `zh_change_apply_audit` AS b WHERE b.aid=? AND a.times=b.times GROUP BY b.caid)) OR a.status=?)-- SELECT a.*,p.name AS account_name FROM `zh_change_apply` AS a LEFT JOIN `zh_project_account` AS p ON a.notice_uid=p.id WHERE a.tid=? AND (a.uid=? OR (a.status!=? AND a.id IN (SELECT b.caid FROM `zh_change_apply_audit` AS b WHERE b.aid=? AND a.times=b.times GROUP BY b.caid)) OR a.status=?) ORDER BY a.in_time DESC LIMIT ?,?-- 优化方案如下:-- 1. 所有类似sql,都去掉a.times=b.times,这个判断实际上没有任何必要,去掉后,执行时间为169ms-- 2. 所有类似的audit表,均添加如下索引,预计速度提升55倍(基于阿里云分析)ALTER TABLE `zh_change_apply_audit` ADD INDEX `idx_aid_caid` (`aid`, `caid`);ALTER TABLE `zh_change_audit` ADD INDEX `idx_uid_cid` (`uid`, `cid`);ALTER TABLE `zh_change_project_audit` ADD INDEX `idx_aid_cpid` (`aid`, `cpid`);ALTER TABLE `zh_change_plan_audit` ADD INDEX `idx_aid_cpid` (`aid`, `cpid`);ALTER TABLE `zh_financial_pay_audit` ADD INDEX `idx_aid_fpid` (`aid`, `fpid`);-- 执行如下sql,执行时间为1.55s,最大扫描行294.76K-- UPDATE `zh_change_audit_list` SET  `bwmx` = CASE  WHEN  `mx_id` = '138dc057-0773-44c6-bad2-160686cf107b' THEN 'K37+808.4~K37+868.4右线S-Ⅳd'  ELSE `bwmx` END  WHERE `mx_id` IN ('138dc057-0773-44c6-bad2-160686cf107b')-- updateDataByRevisePos方法下生成执行-- 优化方案,新增mx_id索引,预计性能提升9116倍ALTER TABLE `calculation`.`zh_change_audit_list` ADD INDEX `idx_mxid` (`mx_id`);ALTER TABLE `calculation`.`zh_stage_rela_pos_final` ADD INDEX `idx_relatid_sid` (`rela_tid`, `sid`);ALTER TABLE `calculation`.`zh_stage_rela_bills_final` ADD INDEX `idx_relatid_sid` (`rela_tid`, `sid`);
 |