当一个表小得多时,编程连接表或使用SQL Join语句会更快吗?

Mik*_*der 3 java sql oracle join

当一个表小得多时,以编程方式连接表或使用SQL Join语句更快吗?

更具体地说,如何从hashmap<int, string>较小的表中获取字符串并将其值设置为从较大的表返回的对象与预先加入数据库中的表相比较?这两个表的相对大小是否有所不同?

更新:重新解释我的问题.抓取较大表的子集(我关心的5,000 - 20,000条记录)然后以编程方式加入较小的表(我会在本地缓存)执行SQL连接吗?SQL连接是应用于整个表还是仅应用于将返回的较大表的子集?

SQL Join语句:

SELECT id, description
FROM values v, descriptions d
WHERE v.descID=d.descID
AND v.something = thingICareAbout;
Run Code Online (Sandbox Code Playgroud)

个人陈述:

SELECT id, descID
FROM values
WHERE v.something = thingICareAbout;

SELECT descID, description
FROM descriptions d;
Run Code Online (Sandbox Code Playgroud)

程序化加入:

for (value : values){
    value.setDescription(descriptions.get(value.getDescID))
}
Run Code Online (Sandbox Code Playgroud)

附加信息:较大的表中总共有800,000,000条记录,对应于较小表中的3,000个值.大多数搜索返回5,000到20,000个结果.这是一个oracle DB.

use*_*421 8

甚至不要这么想.数据库可以在本地执行至少尽可能快的操作,而无需通过网络传输所有数据.


Tim*_*sch 7

通常,像这样连接表是SQL数据库优化的一种操作,因此很有可能它们在这种操作上相当难以击败.

如果您尝试"手动"进行连接,则两个表的相对大小可能会有所不同,因为您必须考虑额外的内存消耗,以便在进行处理时将更大的表数据保存在内存中.

虽然这个示例非常容易实现,但通过自己进行连接,您也会丢失内置的数据完整性检查,如果您让它进行连接,数据库会给您.

  • @pst,这将给一个机会酿造(并可能生长和烤)一些非常棒的咖啡:). (3认同)
  • (另外,我不想在获取8亿条记录时出现:D) (2认同)