前言日常开发中,难免会遇到需要查询到数据库所有记录的业务场景,在索引完善的情况下,当数据量达到百万级别或者以上的时候,全表查询就需要耗费不少的时间,这时候我们可以从以下几个方向着手优化
- 优化sql
- 利用多线程查询
- 分库分表
??注意,这只是简单测试,用于讲解思路,真实情况会更加的复杂,效率可能会相对受到影响,而且也会受硬件配置的影响,所以不是绝对的
前置准备
- 使用InnoDb作为执行引擎
- 创建测试表,有自增主键id
- 往表中添加测试数据(100W以上),可以选择在程序中导入,也可以选择在数据库里面生成测试数据,具体可以参考:生成测试数据
- Java程序中使用Mybatis来操作,使用自定义注解+SpringAOP的方式来记录执行耗时,源码后面会给,有兴趣的朋友可以下载下来实践一下
- 总体目录结构

文章插图

文章插图

文章插图
单线程+基础sql再下来就是基础的全表查询方式,这里使用postman测试
@GetMapping("/sync")public String getData() {List<User> list = userService.queryAllUseSync();return "查询成功!";}@Override@RecordMethodSpendAnnotation //这个注解标记的方法会被SpringAOP管理起来,计算方法耗时public List<User> queryAllUseSync() {//直接就采用Mybatis全查return userMapper.queryAll();}
文章插图
我们来看一下,这个queryAll的sql,可以发现就是一个简单的全表查询
<select id="queryAll" resultMap="UserMap">selectid, username, create_timefrom performance.user</select>原因分析我们直接把sql抓出来EXPLAIN一下,可以发现是没有走索引的,全表600多W的数据,本机耗时(多次测试取平均):67s
文章插图
【【实战】利用多线程优化查询百万级数据】
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
