检查表1中是不是存在记录的优化方法。如果没有则检查表2,否则返回默认值

Posted

技术标签:

【中文标题】检查表1中是不是存在记录的优化方法。如果没有则检查表2,否则返回默认值【英文标题】:Optimized way to check if record is present in table 1. If not then check table 2, else return default value检查表1中是否存在记录的优化方法。如果没有则检查表2,否则返回默认值 【发布时间】:2020-10-07 16:37:06 【问题描述】:

在采访中被问到: 我有 2 张表,一张表有 ID, Name, address 之类的记录。 id(pk) 是从 1 到 10000000。

另一个表有从 10000001 到 20000000 的记录。

我必须检查表1或表2中是否存在特定的ID并返回相应的结果。

因为表很大,所以必须想一个优化的方法来做到这一点。

【问题讨论】:

请提供更多详细信息。他们是mysql表还是hive?你必须通过代码或查询来做? @shaileshgupta 这是在蜂巢中。我被问到这个问题。谢谢你的回复 【参考方案1】:
declare @ID BIGINT
SET @ID=10000000
IF EXIST(SELECT ID FROM TABLE1 WHERE ID=@ID)
    SELECT ID,NAME,ADDRESS FROM TABLE1 WHERE ID=@ID 
ELSE IF EXIST(SELECT ID FROM TABLE2 WHERE ID=@ID)
    SELECT ID,NAME,ADDRESS FROM TABLE2 WHERE ID=@ID 
ELSE
    SELECT @ID

【讨论】:

【参考方案2】:

我的想法很少。

在 hive 中,您可以使用 map-side join,当一个表很大而另一个表很小时,它比通常的 join 快得多。 (这里第二个表是您要搜索的 id) 您可以优化存储数据的方式。如果此类查询频繁,则保持数据按 id 列排序。诸如 orc 之类的列格式会跟踪每个文件中 id 的范围,从而使此类查询更快。

【讨论】:

以上是关于检查表1中是不是存在记录的优化方法。如果没有则检查表2,否则返回默认值的主要内容,如果未能解决你的问题,请参考以下文章

检查记录是不是存在,如果是,则“更新”,如果不“插入”

检查表中是不是存在列,如果没有,则添加列

如何检查 Android SQLite 数据库中是不是存在表?

检查表中是不是存在行的最有效方法是啥?

VBA脚本检查MS ACCESS上是不是存在表,如果存在则删除

检查记录是不是存在,如果它确实加 1(在过程中)