外销升级接口V2.1.3TPS波动较大-基于索引的sql优化
2016-09-11 14:46
363 查看
目 录
1 版本信息 1
2 直接领券TPS只有1000左右 3
2.1 问题现象 3
2.2 定位思路 3
2.3 步骤一:Jconsole查看线程 3
2.4 步骤二: JVM内存使用监控 4
2.5 步骤三:优化sql1 4
2.6 步骤三:优化sql 2 5
2.7 优化后TPS 6
2.8 和DBA的一段讨论 6
3 扩展学习 9
3.1 是否用到索引 9
2 外销升级接口V2.1.3TPS波动较大
2.1 问题现象
性能测试过程中,发现在TPS波动较大,TPS为3500左右。如下图:
2.2 定位思路
2.3 步骤一:Jconsole查看线程
2.4 步骤二: JVM内存使用监控
2.5 步骤三:优化sql1
优化前的sql
EXPLAIN SELECT updatefile0_.id AS id15_, updatefile0_.proId AS proId15_, updatefile0_.filename AS filename15_, updatefile0_.fileUrl AS fileUrl15_, updatefile0_.Version AS Version15_, updatefile0_.adduserid AS adduserid15_, updatefile0_.addtime AS addtime15_, updatefile0_.status AS status15_, updatefile0_.UpdateInfo AS UpdateInfo15_, updatefile0_.fileLength AS fileLength15_, updatefile0_.Hwversion AS Hwversion15_, updatefile0_.baseversion AS basever12_15_, updatefile0_.md5 AS md13_15_, updatefile0_.type AS type15_, updatefile0_.intVersion AS intVersion15_, updatefile0_.flag AS flag15_, updatefile0_.customize AS customize15_, updatefile0_.special AS special15_, updatefile0_.autodl AS autodl15_, updatefile0_.isBeta AS isBeta15_, updatefile0_.isForbitImei AS isForbi21_15_, updatefile0_.isTrial AS isTrial15_, updatefile0_.offsale AS offsale15_ FROM updatefiles updatefile0_ WHERE updatefile0_.proId=72 AND updatefile0_.customize=’0’ AND updatefile0_.Hwversion=’PD1304TMA’ AND updatefile0_.intVersion>1013007 AND updatefile0_.baseversion=’1.13.7’ AND updatefile0_.type=’incre’ AND (updatefile0_.flag=1 OR updatefile0_.flag=0) AND updatefile0_.special=0 AND updatefile0_.status=0 OR updatefile0_.status=1 AND updatefile0_.isTrial=1 ORDER BY updatefile0_.intVersion DESC LIMIT 1;
由上图可知,没有用到索引,sql执行的影响的行数很多。
优化后的
EXPLAIN SELECT * FROM ( SELECT tt.filename, tt.Version, tt.UpdateInfo, tt.fileLength, tt.md5, tt.type, tt.autodl, tt.isBeta, tt.isForbitImei,tt.intVersion FROM updatefiles tt WHERE tt.proId=71 AND tt.customize=’0’ AND tt.Hwversion=’PD1224CTMA’ AND tt.intVersion>1019001 AND tt.baseversion=’1.19.1’ AND tt.type=’incre’ AND tt.status=1 AND tt.isTrial=0 UNION SELECT tt.filename, tt.Version, tt.UpdateInfo, tt.fileLength, tt.md5, tt.type, tt.autodl, tt.isBeta, tt.isForbitImei,tt.intVersion FROM updatefiles tt WHERE tt.proId=71 AND tt.customize=’0’ AND tt.Hwversion=’PD1224CTMA’ AND tt.intVersion>1019001 AND tt.baseversion=’1.19.1’ AND tt.type=’incre’ AND tt.status=0 AND tt.special=0 ) AS t ORDER BY t.intVersion DESC LIMIT 1;
修改点是将OR替换成union,符合降龙十八掌-第四掌 尽量去掉IN和OR,会导致索引失效。
2.6 步骤三:优化sql 2
优化索引,优化前sql及索引:
优化后sql及执行计划:
执行计划EXPLAIN扩展学习:
type
这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
2.7 优化后TPS
不用怀疑,效果就是这么明显。
索引优化应该是对查询性能优化最有效的手段。索引能够轻易将查询性能提高几个数量级。
1 版本信息 1
2 直接领券TPS只有1000左右 3
2.1 问题现象 3
2.2 定位思路 3
2.3 步骤一:Jconsole查看线程 3
2.4 步骤二: JVM内存使用监控 4
2.5 步骤三:优化sql1 4
2.6 步骤三:优化sql 2 5
2.7 优化后TPS 6
2.8 和DBA的一段讨论 6
3 扩展学习 9
3.1 是否用到索引 9
2 外销升级接口V2.1.3TPS波动较大
2.1 问题现象
性能测试过程中,发现在TPS波动较大,TPS为3500左右。如下图:
2.2 定位思路
2.3 步骤一:Jconsole查看线程
2.4 步骤二: JVM内存使用监控
2.5 步骤三:优化sql1
优化前的sql
EXPLAIN SELECT updatefile0_.id AS id15_, updatefile0_.proId AS proId15_, updatefile0_.filename AS filename15_, updatefile0_.fileUrl AS fileUrl15_, updatefile0_.Version AS Version15_, updatefile0_.adduserid AS adduserid15_, updatefile0_.addtime AS addtime15_, updatefile0_.status AS status15_, updatefile0_.UpdateInfo AS UpdateInfo15_, updatefile0_.fileLength AS fileLength15_, updatefile0_.Hwversion AS Hwversion15_, updatefile0_.baseversion AS basever12_15_, updatefile0_.md5 AS md13_15_, updatefile0_.type AS type15_, updatefile0_.intVersion AS intVersion15_, updatefile0_.flag AS flag15_, updatefile0_.customize AS customize15_, updatefile0_.special AS special15_, updatefile0_.autodl AS autodl15_, updatefile0_.isBeta AS isBeta15_, updatefile0_.isForbitImei AS isForbi21_15_, updatefile0_.isTrial AS isTrial15_, updatefile0_.offsale AS offsale15_ FROM updatefiles updatefile0_ WHERE updatefile0_.proId=72 AND updatefile0_.customize=’0’ AND updatefile0_.Hwversion=’PD1304TMA’ AND updatefile0_.intVersion>1013007 AND updatefile0_.baseversion=’1.13.7’ AND updatefile0_.type=’incre’ AND (updatefile0_.flag=1 OR updatefile0_.flag=0) AND updatefile0_.special=0 AND updatefile0_.status=0 OR updatefile0_.status=1 AND updatefile0_.isTrial=1 ORDER BY updatefile0_.intVersion DESC LIMIT 1;
由上图可知,没有用到索引,sql执行的影响的行数很多。
优化后的
EXPLAIN SELECT * FROM ( SELECT tt.filename, tt.Version, tt.UpdateInfo, tt.fileLength, tt.md5, tt.type, tt.autodl, tt.isBeta, tt.isForbitImei,tt.intVersion FROM updatefiles tt WHERE tt.proId=71 AND tt.customize=’0’ AND tt.Hwversion=’PD1224CTMA’ AND tt.intVersion>1019001 AND tt.baseversion=’1.19.1’ AND tt.type=’incre’ AND tt.status=1 AND tt.isTrial=0 UNION SELECT tt.filename, tt.Version, tt.UpdateInfo, tt.fileLength, tt.md5, tt.type, tt.autodl, tt.isBeta, tt.isForbitImei,tt.intVersion FROM updatefiles tt WHERE tt.proId=71 AND tt.customize=’0’ AND tt.Hwversion=’PD1224CTMA’ AND tt.intVersion>1019001 AND tt.baseversion=’1.19.1’ AND tt.type=’incre’ AND tt.status=0 AND tt.special=0 ) AS t ORDER BY t.intVersion DESC LIMIT 1;
修改点是将OR替换成union,符合降龙十八掌-第四掌 尽量去掉IN和OR,会导致索引失效。
2.6 步骤三:优化sql 2
优化索引,优化前sql及索引:
优化后sql及执行计划:
执行计划EXPLAIN扩展学习:
type
这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
2.7 优化后TPS
不用怀疑,效果就是这么明显。
索引优化应该是对查询性能优化最有效的手段。索引能够轻易将查询性能提高几个数量级。
相关文章推荐
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
- 基于索引的SQL语句优化之一
- 基于索引的SQL语句优化
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化
- 【MySQL】基于MySQL的SQL优化(五)——建立索引优化SQL
- 基于索引的SQL语句优化(转帖,声明,本人纯属收藏之用,以备不时之需)
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之一
- 基于索引的SQL语句优化之降龙十八掌
- 基于索引的SQL语句优化之一
- 基于索引的SQL语句优化之降龙十八掌