(主表) count:50793 (从表) count: 50793
目标:从5w多的数据查询GROUP_ID = 308的数据,查询的数据2w多条
测试受限于机器性能以及执行多次下oracle缓存,有一定误差。仅做参考
1 单表不加条件
第一次请求:sql时间:4240,接口返回5811
第二次请求:sql时间:3211,接口返回3293
第二次请求:sql时间:1998,接口返回2753
2 单表加条件(不带索引)
第一次请求:sql时间:1853,接口返回2578
第二次请求:sql时间:1608,接口返回2011
第二次请求:sql时间:1008,接口返回1358
3 单表加条件(带索引)
100ms以内
4 单表 分段查询
分段大小:100(size):sql时间:18231,接口返回18254
500(size):sql时间:4482,接口返回4496
1000(size):sql时间:2523,接口返回2576
5 多表关联查询,分段查询
800(size):sql时间:4125,接口返回4143
5000(size):sql时间:2491,接口返回2510
6 多表关联查询,不分段
第一次请求:sql时间:1740,接口返回1787
第二次请求:sql时间:1871,接口返回1885
第二次请求:sql时间:1713,接口返回1734
7 多表关联查询,多线程分段查询
800(size):sql时间:5140,接口返回5161
5000(size):sql时间:1176,接口返回1196
10000(size):sql时间:1801,接口返回1819
总结:
1 某个索引下的数据量占总数据较大,导致索引不生效
2 分段查询有时能够提升性能,根据分段个数不同效果不同,本次测试认为黄金比例是100
3 一次性需要查询出来很多数据时候,feach-size设置可以提高IO性能(最关键的点)
4 多线程分段查询,性能会快一些,根据分段个数不同效果不同。
5 表关联的时候,尽可能对主表进行过滤在关联
6 关联时候,没必要对主表分页在关联,可以对整个sql分页,因为sql引擎会做优化