这是公司研发团队发现的一个关于数据库索引失效方面的问题,我们的工程师对该问题进行了分析和解决并写了这份小结。归根揭底还是对开发框架和技术应用的把握上存在纰漏,但个人觉得在分析问题->找出原因->确认解决方案这一思路和策略上本文能起到一定借鉴作用,所以稍微梳理了一下拿出来和大家分享。
问题的现状是测试人员反馈某一个功能操作耗时很长(需要20秒以上),而开发人员核对代码发现无论从业务逻辑上还是代码实现上都没有问题,涉及到的数据查询等功能在数据库中也创建了合适的索引以确保查询效率,于是我们的工程师就去研究了,过程如下:
1. 首先应用内嵌入了一个系统监控平台JavaMelody(此为google出品的一个开源神器 https://code.google.com/p/javamelody/)
2. 通过该神器观测到该操作的方法执行帧信息,发现其中耗时最多的一步:
3. 下钻至此方法内部,看到其调用的sql为:
4. 对该sql进行分析