SQL优化技巧总结,及案例分析( 二 )


 

  • 原执行计划

SQL优化技巧总结,及案例分析

文章插图
 
  • 初步优化思路
  1. SQL中 where条件字段类型要跟表结构一致,表中user_id 为varchar(50)类型,实际SQL用的int类型,存在隐式转换,也未添加索引 。将b和c表user_id 字段改成int类型 。
  2. 因存在b表和c表关联,将b和c表user_id创建索引
  3. 因存在a表和b表关联,将a和b表seller_name字段创建索引
  4. 利用复合索引消除临时表和排序
初步优化SQL
alter table b modify `user_id` int(10) DEFAULT NULL;alter table c modify `user_id` int(10) DEFAULT NULL;alter table c add index `idx_user_id`(`user_id`);alter table b add index `idx_user_id_sell_name`(`user_id`,`seller_name`);alter table a add index `idx_sellname_gmt_sellid`(`gmt_create`,`seller_name`,`seller_id`);查看优化后执行时间
SQL优化技巧总结,及案例分析

文章插图
 
查看优化后执行计划
SQL优化技巧总结,及案例分析

文章插图
 
查看warnings信息
SQL优化技巧总结,及案例分析

文章插图
 
继续优化alter table a modify "gmt_create" datetime DEFAULT NULL;
查看执行时间
SQL优化技巧总结,及案例分析

文章插图
 
查看执行计划
SQL优化技巧总结,及案例分析

文章插图
 
总结
  1. 查看执行计划 explain
  2. 如果有告警信息,查看告警信息 show warnings;
  3. 查看SQL涉及的表结构和索引信息
  4. 根据执行计划,思考可能的优化点
  5. 按照可能的优化点执行表结构变更、增加索引、SQL改写等操作
  6. 查看优化后的执行时间和执行计划
  7. 如果优化效果不明显,重复第四步操作

【SQL优化技巧总结,及案例分析】


推荐阅读