mysql-sql优化
案例1:一次 SQL 查询优化原理分析
1.
SELECT PLAT_BATCH_CODE FROM t_fee_fact_record t WHERE t.SALES_CHANNEL = ? AND t.PAY_STATUS IN (?) AND t.FEE_STATUS != ? AND t.ISCLEAN = ? AND t.processing = ? AND TIMESTAMPDIFF(MINUTE, t.OPERATE_TIME, now()) >= ?
优化建议:
1).
t.FEE_STATUS != '1' 改成
AND t.FEE_STATUS in('0','2','3')
2).
java中计算TIMESTAMPDIFF(MINUTE, t.OPERATE_TIME, now())
2.
SELECT weixin_id FROM wcap_user_binding_rs WHERE check_status IS NULL ORDER BY bindingtime ASC LIMIT ?
优化建议:
check_status 改为默认空字符串
3.
按不同的条件统计数据,之前用的子查询,优化用sum结合if
select sum(IF(is_active_in_7_days = 1,1,0))as active7, sum(IF(is_silent_in_7_days = 1,1,0))as slient7 , sum(IF(is_active_in_14_days = 1,1,0))as active14, sum(IF(is_silent_in_14_days = 1,1,0))as slient14 from adb_table where accountid = 5139 AND dt = 20211221