今天发现页面初始化加载时间过长,(TTFB)等待状态竟然花费了近7s,要对此页面加载进行优化,减少加载时间
执行页面查询对应的sql;发现table f的type为ALL,以为未加索引;
找到该表查看,有索引;那么问题应该就是索引未生效;想了一下失效的种种原因竟然都不满足,有点纳闷;
最后发现JBS_PROJECT_PROFIT f ON f.PROJECT_ID = p.ROW_ID中的f.PROJECT_ID = p.ROW_ID字符集和排序规则不同;于是统一之后,sql执行时间未0.5s,页面立马加载好了。索引成功优点很明显,极大提高了查询效率。
总结一下:
页面查询加载慢,考虑该查询功能是否包含了冗余的处理;
查看对应的sql是否规范,是否添加了索引;
- 索引失效部分情况:
- 表的字符集不同
- 在where条件中进行运算
- like %%,且以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作
- 在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
- 组合索引不满足最左匹配原则
- 两列做比较
- is not null
- not in和not exists等等
小结
本文记载了自己在工作中遇到页面加载时间过长情况,通过代码及sql最后定位到原因索引失效,最终确认列的排序规则不同也会导致索引失效,有点意料之外,记录一下,在实践中会遇到各种奇怪的问题,静下心来,解决方式往往在不起眼的位置。
活动地址:CSDN21天学习挑战赛