检查表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 数据库中是不是存在表?