当前位置: 首页 > news >正文

Spring Boot中如何查询PGSQL分表后的数据

数据库用的pgsql,在表数据超过100w条的时候执行定时任务进行了分表,分表后表名命名为原的表名后面拼接时间,如原表名是card_device_trajectory_info,分表后拼接时间后得到card_device_trajectory_info_20240503,然后分表后把原来的表重置为空。这样就把100w条数据放到了card_device_trajectory_info_20240503里面,card_device_trajectory_info重置空,以此类推。但是我在java业务代码中,我想查询之前的那条数据就查不到了,要怎么关联上之前分出去的表去查询呢?

在这里插入图片描述

首先,我们要获取到表名,因为表名是不明确的,所以要通过模糊查询的方式获取表名

在这里插入图片描述
可以用List<String>去存储表明,然后获取列表的大小去做一个循环,从每一张表中查询,直到循环结束。但是这种方式极可能影响性能消耗,所以。。。

下面是代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class Main {public static void main(String[] args) {String baseTableName = "card_device_trajectory_info"; // 基础表名String url = "jdbc:postgresql://localhost:5432/your_database";String user = "your_username";String password = "your_password";try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement()) {String sql = "SELECT table_name FROM information_schema.tables WHERE table_name LIKE '" + baseTableName + "%'";ResultSet rs = stmt.executeQuery(sql);// 处理查询结果,获取所有分表名称while (rs.next()) {String tableName = rs.getString("table_name");// 根据业务逻辑处理分表名称,比如存入集合或者数组中}// 根据业务逻辑构建查询语句来查询特定的分表for (String tableName : yourTableCollection) { // 替换yourTableCollection为你保存分表名称的集合或数组String querySql = "SELECT * FROM " + tableName + " WHERE your_condition_here";// 执行查询操作并处理结果}} catch (SQLException e) {e.printStackTrace();}}
}

如果数据量很大且分表很多,那么逐个查询并遍历所有分表的方式可能会影响性能并消耗大量时间和资源。针对这种情况,可以考虑以下一些优化方案来减少性能消耗:

  • 分页查询:可以考虑对每张分表进行分页查询,以减少单次查询返回的数据量,从而降低查询的性能消耗。
  • 并发查询:可以考虑使用多线程或异步方式,并发地查询多张分表,以缩短整体查询所需的时间。
  • 数据预处理:如果业务允许,可以考虑在数据写入时进行预处理,将需要频繁查询的数据进行汇总或者合并存储,以减少查询时的分表数量和数据量。
  • 数据库分区:考虑根据业务需求对数据库进行分区,将数据分散存储到不同的物理存储中,从而减少单个查询涉及的数据量。
  • 数据缓存:对查询结果进行缓存,避免重复查询相同的数据,提高查询效率。

相关文章:

  • Pytorch 笔记
  • Linux入门攻坚——23、DNS和BIND基础入门2
  • 微信小程序开发(持续更新)
  • 实时合成 1 秒频订单簿快照:DolphinDB INSIGHT 行情插件与订单簿引擎应用
  • FaceChain-FACT:开源10秒写真生成,复用海量LoRa风格,基模友好型写真应用
  • 【链表】Leetcode 82. 删除排序链表中的重复元素 II【中等】
  • JavaScript日期与时间处理的艺术
  • webshell工具-冰蝎流量特征和加密方式
  • VUE3学习第一篇:启动ruoyi
  • 计算机网络-BGP基础概念
  • 算法之堆排序
  • 量子密钥分发系统基础器件(一):光纤干涉仪
  • C#算数运算符
  • HBase安装
  • 【深入浅出:正则化在防止深度学习过拟合中的应用】
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【Amaple教程】5. 插件
  • 【技术性】Search知识
  • 【前端学习】-粗谈选择器
  • Angular 2 DI - IoC DI - 1
  • cookie和session
  • Docker入门(二) - Dockerfile
  • IDEA 插件开发入门教程
  • JAVA SE 6 GC调优笔记
  • js中forEach回调同异步问题
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Node项目之评分系统(二)- 数据库设计
  • Promise面试题,控制异步流程
  • Redux系列x:源码分析
  • socket.io+express实现聊天室的思考(三)
  • 半理解系列--Promise的进化史
  • 读懂package.json -- 依赖管理
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 老板让我十分钟上手nx-admin
  • 因为阿里,他们成了“杭漂”
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Linux权限管理(week1_day5)--技术流ken
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # .NET Framework中使用命名管道进行进程间通信
  • # 透过事物看本质的能力怎么培养?
  • ###STL(标准模板库)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Z2294. 打印树的直径
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (函数)颠倒字符串顺序(C语言)
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (南京观海微电子)——I3C协议介绍
  • (区间dp) (经典例题) 石子合并
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .chm格式文件如何阅读