米
心情
所有
图集
登录
搜索
原创
mysql优化篇-初步了解和学习
米醋儿
发布于:2022-02-08
  场景:由于数据量过大,查询20000条数据进行导出,在命令行运行,等待了1天后都没有运行完成,经过分析并得出结论,这里有部分sql运行起来太慢了,需要优化。 ``` SELECT 工单ID, 服务部, 大区, 区域, 服务店代码 , 服务店名称, 服务店简称, 省份, 城市, 顾客姓名 , 顾客电话, 顾客地址, 送修人, 送修人电话, 服务顾问 , 维修技师, 工单号, 工单类型, 维修类型, VIN , 发动机号, 车牌号, 三包性质, 车系, 车型 , 是否是便捷店维修, 便捷店名称, 购车日期, 车辆颜色, 车辆用途 , 车辆进厂里程, 送修问题, 检查结果, 进厂电里程, 换表总里程 , 换表电里程, 开单日期, 第一次结算日期, 最后结算日期, 结算金额 , 含特殊件或预定件, 3DC电访时间, 卡券号, 短信推送状态, 短信推送时间 , 微信推送状态, 微信推送时间, 问卷是否填写, 问卷填写时间, 是否匿名 , GROUP_CONCAT(q0 SEPARATOR '') AS "请您回顾您本次进店的服务体验,您对{}所提供服务的总体评价是:", GROUP_CONCAT(q1 SEPARATOR '') AS "您到店后,服务人员是否及时高效地接待您?" , GROUP_CONCAT(q2 SEPARATOR '') AS "维修等待期间,服务人员是否向您通报维修进度?", GROUP_CONCAT(q3 SEPARATOR '') AS "您认为服务店的环境是否整洁舒适?" , GROUP_CONCAT(q4 SEPARATOR '') AS "您认为接待您的服务顾问是否专业、热情友好?", GROUP_CONCAT(q5 SEPARATOR '') AS "您认为维修您爱车的维修技师是否专业、热情友好?" , GROUP_CONCAT(q6 SEPARATOR '') AS "您认为本次保养花费的时间是否合理?", GROUP_CONCAT(q7 SEPARATOR '') AS "服务人员是否向您解释清楚本次维修项目及费用?" , GROUP_CONCAT(q8 SEPARATOR '') AS "离店时,服务人员是否及时高效地协助您完成费用结算并向您交付车辆?", GROUP_CONCAT(q9 SEPARATOR '') AS "从进店到离店整个过程中,您觉得服务店的服务是否有让您印象深刻或者感动的部分?" , GROUP_CONCAT(q10 SEPARATOR '') AS "为了将来给您和其他车主提供更高质量的服务,我们真诚的期待您能对我们的服务提出宝贵意见或建议:" FROM ( SELECT sm.id AS '工单ID', sm.service_dep AS '服务部', sm.pergana AS '大区', sm.zone AS '区域', sm.dealer_code AS '服务店代码' , sm.dealer_name AS '服务店名称', sm.dealer_jname AS '服务店简称', sm.province AS '省份', sm.city AS '城市', sm.`name` AS '顾客姓名' , sm.phone AS '顾客电话', sm.location AS '顾客地址', sm.sname AS '送修人', sm.sphone AS '送修人电话', sm.service_con AS '服务顾问' , sm.chief_tec AS '维修技师', sm.job_num AS '工单号', sm.job_type AS '工单类型', sm.type AS '维修类型', sm.vin AS 'VIN' , sm.engine_no AS '发动机号', sm.car_no AS '车牌号', sm.three_type AS '三包性质', sm.car_series AS '车系', sm.car_type AS '车型' , sm.is_simple AS '是否是便捷店维修', sm.simple_name AS '便捷店名称', sm.buy_time AS '购车日期', sm.car_color AS '车辆颜色', sm.car_use AS '车辆用途' , sm.vehicle_mileage AS '车辆进厂里程', sm.problem AS '送修问题', sm.check_result AS '检查结果', sm.vehicle_elect_mileage AS '进厂电里程', sm.all_mileage AS '换表总里程' , sm.elect_all_mileage AS '换表电里程', sm.job_time AS '开单日期', sm.start_settlement_date AS '第一次结算日期', sm.settlement_date AS '最后结算日期', sm.settlement_fee AS '结算金额' , sm.special_desc AS '含特殊件或预定件', sm.threeDC_time AS '3DC电访时间', sm.`code` AS '卡券号' , CASE qm.sms_push WHEN '1' THEN '推送成功' WHEN '2' THEN '推送失败' ELSE '未推送' END AS '短信推送状态', qm.sms_push_time AS '短信推送时间' , CASE qm.wechat_push WHEN '1' THEN '推送成功' WHEN '2' THEN '推送失败' ELSE '未推送' END AS '微信推送状态', qm.wechat_push_time AS '微信推送时间' , IF(qm.reply_time > 0, '是', '否') AS '问卷是否填写' , IF(qm.reply_time > 0, FROM_UNIXTIME(qm.reply_time), '') AS '问卷填写时间' , IF(qm.anonymous = 1, '是', '否') AS '是否匿名' , CASE q.title WHEN '请您回顾您本次进店的服务体验,您对{}所提供服务的总体评价是:' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q0 , CASE q.title WHEN '您到店后,服务人员是否及时高效地接待您?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q1 , CASE q.title WHEN '维修等待期间,服务人员是否向您通报维修进度?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q2 , CASE q.title WHEN '您认为服务店的环境是否整洁舒适?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q3 , CASE q.title WHEN '您认为接待您的服务顾问是否专业、热情友好?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q4 , CASE q.title WHEN '您认为维修您爱车的维修技师是否专业、热情友好?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q5 , CASE q.title WHEN '您认为本次保养花费的时间是否合理?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q6 , CASE q.title WHEN '服务人员是否向您解释清楚本次维修项目及费用?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q7 , CASE q.title WHEN '离店时,服务人员是否及时高效地协助您完成费用结算并向您交付车辆?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q8 , CASE q.title WHEN '从进店到离店整个过程中,您觉得服务店的服务是否有让您印象深刻或者感动的部分?' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q9 , CASE q.title WHEN '为了将来给您和其他车主提供更高质量的服务,我们真诚的期待您能对我们的服务提出宝贵意见或建议:' THEN CONCAT_WS(' ', o.content, r.content) ELSE '' END AS q10 FROM csi_survey_members sm LEFT JOIN ( SELECT id, sms_push, wechat_push, sessionid, job_num , sms_push_time, wechat_push_time, questionnaire_id, reply_time, anonymous FROM csi_questionnaire_member ) qm ON sm.job_num = qm.job_num LEFT JOIN ( SELECT id, sessionid, create_time, content, question_id , questionnaire_id, option_id FROM csi_reply ) r ON qm.sessionid = r.sessionid LEFT JOIN csi_questions q ON r.question_id = q.id LEFT JOIN csi_options o ON r.option_id = o.id WHERE sm.type = '常规保养' AND qm.sms_push = 1 AND qm.anonymous = '2' AND qm.reply_time > 0 AND sm.type = '常规保养' ORDER BY sm.id ASC ) t GROUP BY t.`工单ID` LIMIT 0, 10000 ``` 大致运行的sql如上,可见其复杂性,并且使用了大量的子查询和leftjoin,导致部分索引用不上。 我们在sql前加 explain 进行分析 [](http://micuer.com/data/avatar/20220208/97342f389ecc04d5b2f055030e942076.png) 可见红框处基本上都没有用上索引,这线上数据可是几百万条,查都猴年马月了啊,目前这里没有数据库权限,无法修改索引及进行表的复制,主要是要记住,可以使用explain分析sql。 参考资料: 线上SQL优化 https://www.cnblogs.com/xuanzhi201111/p/4531988.html MySQL Explain详解 https://www.cnblogs.com/tufujie/p/9413852.html 大家有空可以学习一下上述的2篇文章,有帮助。这里就不搬运内容了,希望数据会一直存在。
注:原创不易,转载请注明出处(
http://www.micuu.com/new/2524.html
),本站所有资源来源于网络收集,如有侵权请联系QQ245557979进行清除。
最后修改与 2022-02-22
上一篇:
感觉百度站长中索引量是需要自己登陆百度站
下一篇:
centos安装redis客户端、Linux安装redis客户端、Linux链接redis
留言反馈
请先登录
问题反馈渠道,如有软件无法下载或者其他问题可反馈。【由于某种原因,目前留言不展示】
用户需要登录后才能留言反馈
立即留言
珍藏视频
10分钟高效燃脂
30天高效瘦脸操
5分钟缓解颈椎操
友人
微博
全民K歌
唱吧
今日头条
悠悠网
科技小锅盖
彼岸桌面
阮一峰
laravel社区
V2ex
掘金
更多>