ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

同样的代码逻辑,同样的表结构,由于数据量的不同导致查询没有走索引,而引起请求超时案例分析

2022-08-24 11:03:47  阅读:169  来源: 互联网

标签:damand 同样 manager cloud 数据量 超时 id change idbf


问题描述:

预发环境目前加载全部变更会超时,线上正常。需要看一下是什么问题避免预发上的问题带到线上

 

 

 

 

 

 

分析解决过程:

EXPLAIN

SELECT i.damand_manager_info_id as damand_manager_id,

title,

i.damand_change_type,

i.customer_cloud_name_id,

i.damand_change_type_l2,

i.gmt_create,

i.pre_begin_time,

i.change_status,

i.category,

i.damand_pri,

i.change_result,

i.pre_end_time,

i.executor,

i.creator,

i.pro_inst_id,

i.damand_id,

i.share_change,

i.creator,

i.change_resaon,

i.actual_begin_time,

i.actual_end_time,

i.cloud_product,

i.cloud_site_id as site_id,

s.aliase,

s.cloud_site_name as site_name,

i.template_id,

i.is_curing,

i.risk_level,

i.sky_eye_id,

(CASE WHEN idbf.damand_id IS NULL THEN 0 WHEN idbf.`is_valid`= 0 THEN 0 ELSE 1 END) AS hasTodo,

(CASE WHEN idbf.`is_valid`= 0 THEN 0 WHEN idbf.status IS NULL THEN 0 WHEN idbf.status= '已处理' THEN 0 WHEN idbf.status= '未处理' THEN 1 ELSE 0 END) AS todoStatus

from damand_manager_info i

LEFT JOIN damand_manager_info_son son ON i.damand_manager_info_id= son.damand_manager_id

LEFT JOIN cloud_site s ON i.cloud_site_id= s.id

LEFT JOIN itom_damand_backfills idbf on idbf.damand_id= i.`damand_manager_info_id`

order by i.gmt_create desc

limit 0,

10;查看这个sql语句的执行计划,发现预发和生产不一样

预发:

生产:

解决方法:是更改sql语句,让它强制走索引,格式如下:force index("索引名");

加上force index(idx_201903081253)和force index(idx_damand_id);如下:

 explain SELECT

    i.damand_manager_info_id AS damand_manager_id,

    title,

    i.damand_change_type,

    i.customer_cloud_name_id,

    i.damand_change_type_l2,

    i.gmt_create,

    i.pre_begin_time,

    i.change_status,

    i.category,

    i.damand_pri,

    i.change_result,

    i.pre_end_time,

    i.executor,

    i.creator,

    i.pro_inst_id,

    i.damand_id,

    i.share_change,

    i.creator,

    i.change_resaon,

    i.actual_begin_time,

    i.actual_end_time,

    i.cloud_product,

    i.cloud_site_id AS site_id,

    s.aliase,

    s.cloud_site_name AS site_name,

    i.template_id,

    i.is_curing,

    i.risk_level,

    i.sky_eye_id,(

    CASE

    

    WHEN idbf.damand_id IS NULL THEN

    0 

    WHEN idbf.`is_valid` = 0 THEN

    0 ELSE 1 

    END 

    ) AS hasTodo,(

    CASE

    

    WHEN idbf.`is_valid` = 0 THEN

    0 

    WHEN idbf.STATUS IS NULL THEN

    0 

    WHEN idbf.STATUS = '已处理' THEN

    0 

    WHEN idbf.STATUS = '未处理' THEN

    1 ELSE 0 

    END 

    ) AS todoStatus 

    FROM

    damand_manager_info i  force index(idx_201903081253)

    LEFT JOIN damand_manager_info_son son ON i.damand_manager_info_id = son.damand_manager_id

    LEFT JOIN cloud_site s ON i.cloud_site_id = s.id

    LEFT JOIN itom_damand_backfills idbf  force index(idx_damand_id)  ON idbf.damand_id = i.`damand_manager_info_id` 

    ORDER BY

    i.gmt_create DESC 

    LIMIT 0,10

    参考网址见:https://www.cnblogs.com/lipengsheng-javaweb/p/16619073.html

    

    

    

    

标签:damand,同样,manager,cloud,数据量,超时,id,change,idbf
来源: https://www.cnblogs.com/lipengsheng-javaweb/p/16619067.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有