如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?
Posted
技术标签:
【中文标题】如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?【英文标题】:How can I query multiple related tables, without a join, and get consistent data using JDBC? 【发布时间】:2017-07-26 18:49:45 【问题描述】:我正在创建一个进程,该进程通过 JDBC 连接到给定的 SQL Server 数据库,扫描每个表,并读取自上次运行此进程以来已插入或更新的任何新数据。出于性能考虑,数据库的所有者将不允许此过程对任何表进行联接。
有问题的场景
表 A 是表 B 的父表 此进程从表 A 中读取数据 在读取表 B 的进程之前,插入了新的父记录 到表 A 中,新的子记录被插入到表 B 中 读取表 B 时,将存在不存在的子记录 在结果集中有对应的父记录 以前读过的表 A
【问题讨论】:
你能用ASP.NET等可以处理数据的服务吗? 我正在使用 JAVA 8 并通过 JDBC 连接 ROFL。由于性能问题,他们不会允许连接,但他们可以读取每个表的每一行吗?这完全没有任何意义。他们阻止以标准方式访问数据,因为它可能会影响性能,但允许非标准方式绝对会对性能产生负面影响。有人需要和这个人谈谈,问他们这个愚蠢的想法是从哪里想到的。 进程不会读取每一行。最后修改的时间戳列将用于确定自上次运行以来发生了什么变化。 即便如此,不使用 join 的奇怪强制执行是我听说过的最奇怪的事情之一。 【参考方案1】:如果您不能执行 JOIN,那么您可能只需要跟踪每个父表的每个检索到的主键,然后使用这些主键来查询子行。它将使查询复杂化,并给数据库增加更多压力,因为您执行更多查询而不是在单个 JOINed 查询中执行它,但它应该给出相同的结果。
【讨论】:
以上是关于如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有昂贵查询的情况下更快地自连接表(Oracle SQL)