您的位置:首页 > 数据库 > SQL

外销升级接口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



不用怀疑,效果就是这么明显。

索引优化应该是对查询性能优化最有效的手段。索引能够轻易将查询性能提高几个数量级。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 索引 优化