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

n8ghc7c1  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(312)

采访中被问到:我有两个表,一个表有id、姓名、地址等记录。id(pk)从1到10000000。另一个表有从10000001到20000000的记录。我必须检查表1或表2中是否存在特定的id,并返回相应的结果。因为表的大小很大,所以必须考虑一种优化的方法来实现这一点。

oymdgrw7

oymdgrw71#

我脑子里没什么主意。
在配置单元中,可以使用map-side连接,当一个表大而另一个表小时,它比通常的连接快得多(此处第二个表是您要搜索的id)
您可以优化存储数据的方式。如果此类查询频繁,则按id列对数据进行排序。orc之类的列格式跟踪每个文件中id的范围,从而使此类查询更快。

nzkunb0c

nzkunb0c2#

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

相关问题