【问题标题】:Optimized Sql query for combining two tables?优化 Sql 查询以组合两个表?
【发布时间】:2015-11-26 19:44:49
【问题描述】:

嗨,我的项目有这个实时问题,比如说我有两个表

TABLE STUDENT & TABLE CLASSATTENDANCEHISTORY,(名字是虚构的)

STUDENT
NAME, ID, LAST_TIME_SEEN_IN_COLEGE,


CLASSHISTORY
CLASSNAME, ID, STUDENT_ID, LAST_TIME_PRESENT,

" 现在我想删除所有学生名单,学生是 student.last_time_seen_in_colege > classHistory.last_time_present "

由于这两个表,假设将有数百万行,所以我想分批做,一次 50 个批次,否则表将被锁定很长时间,这两个表非常活跃表格。

两个表都会有很多操作,所以我想批量使用。

JOIN 还是 SUBQUERY 会是最好的吗?或者我可以将整个表存储在 JAVA 内存中而不是进程中吗?请一些专家建议,我希望它是最好的?

我知道我们可以使用内连接,但我想知道有效的方法,如果我说每次进行内连接 50 批,内连接每次都会搜索整个表。

【问题讨论】:

  • 你为什么大喊大叫?请回复(也只是尝试一下,我猜联接工作正常,Java 可能会耗尽内存,但你自己看看)
  • 这是用于 MySQL 还是 SQL Server?请删除它不适合的标签。
  • 即使有数百万条记录,如果您有适当的索引,连接也应该非常有效。您应该能够在一个简单的 sql 语句中执行删除(如果您绝对需要,您可以添加一个限制子句并重复执行查询,直到它返回 0 条已修改的记录)。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 我已经知道了,我期待更有效的方法!这是非常常见的方法,每个人都这样做,我正在使用 Sql,

标签: java sql optimization


【解决方案1】:
delete from student where id in ( select id from student s where exists (select null from classhistory c where s.last_time_seen_in_college > c.last_time_present )

上面的查询在这种情况下可以工作。

关于询问tom何时使用join以及何时进行子查询的解释 https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:66812779016023

在这种情况下,java 不是一个选项,因为您提到表将有数百万行来选择这数百万行并将它们存储到结果集中,然后处理它们将花费比我们想象的更多的时间。

【讨论】:

  • 正如我已经提到的,表名和结构是虚构的!我把名字给了一个清楚的理解。
  • 链接很有用,但最后一个问题没有回答?存在什么作用可以使它更快?
  • 如果您只想检查其他表中是否存在 1 个实体是最好的解决方案。例如假设有 2 个表 student,library_entries,在 student 中,student_id 1,2 有 3 个条目,3 分别。在图书馆中有 30 个条目,student_id 1 有 20 个条目,学生 id 2 有 10 个条目,在这种情况下,您只需要检查其他表中是否存在特定 id 是有益的。如果您想从表连接中检索所有匹配的行更有益。希望有帮助
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2022-01-23
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多