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

问题描述

在一次采访中问: 我有2个表,一个表有ID,名称,地址之类的记录。 id(pk)是1到10000000。 另一个表具有从10000001到20000000的记录。 我必须检查表1或表2中是否存在特定的ID,并返回相应的结果。 由于表很大,因此必须考虑一种优化的方法

解决方法

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,ADDRESS FROM TABLE2 WHERE ID=@ID 
ELSE
    SELECT @ID
,

我脑海中几乎没有什么主意。

  • 在配置单元中,可以使用map侧联接,当一个表很大而另一个表很小时,它比通常的联接快得多。 (此处第二张表是您要搜索的ID)
  • 您可以优化存储数据的方式。如果此类查询很频繁,请按ID列对数据进行排序。诸如orc之类的列格式会跟踪每个文件中id的范围,从而使查询速度更快。